⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgdaemon.cpp

📁 <B>DirectX9.0 3D游戏编程</B>
💻 CPP
字号:
/*******************************************************************
 *         Advanced 3D Game Programming using DirectX 8.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   Title: MsgDaemon.h
 *    Desc: defenition for the inter-object messaging
 *          system
 * copyright (c) 2001 by Peter A Walsh and Adrian Perez
 * See license.txt for modification and distribution information
 ******************************************************************/

#include "stdafx.h"
#include <assert.h>
#include "MsgDaemon.h"

cMsgDaemon* cMsgDaemon::m_pGlobalMsgDaemon = NULL;

cMsgDaemon::cMsgDaemon()
{
}

cMsgDaemon::~cMsgDaemon()
{
	// iterate and destroy all the objects?
}



void cMsgDaemon::RegObject( objID id, iGameObject* pObj )
{
	/**
	 * We must have unique ID's for each object.
	 */
	assert( m_objectMap[ id ] == NULL );

	m_objectMap[ id ] = pObj;
}



void cMsgDaemon::UnRegObject( objID id )
{
	m_objectMap[ id ] = NULL;
}



uint cMsgDaemon::DeliverMessage( const sMsg& msg )
{
	// Make sure there isn't a bogus receiver
	assert( g_invalidID != msg.m_dest );

	iGameObject* pDest = m_objectMap[ msg.m_dest ];
	if( pDest == NULL )
	{
		char buff[1024];
		sprintf( buff, "Message %d sent to non-existent object %d",
			msg.m_type, msg.m_dest );
		throw cGameError( buff );
	}
	return pDest->ProcMsg( msg );
}



void DebPrint( char* first, ... )
{
	char buff[1024];

	va_list marker;

	va_start( marker, first );     /* Initialize variable arguments. */

	vsprintf( buff, first, marker );

	va_end( marker );              /* Reset variable arguments.      */

	// g_gameServer is the same for the server and the client.
	SendMessage( sMsg( msgPrintString, g_gameServer, buff ) );
}

void LogPrint( char* first, ... )
{
	char buff[1024];

	va_list marker;

	va_start( marker, first );     /* Initialize variable arguments. */

	vsprintf( buff, first, marker );

	va_end( marker );              /* Reset variable arguments.      */

	static bool bFirst = true;
	static FILE* fp;
	if( bFirst )
	{
		bFirst = false;

		if( IsClient() )
		{
			fp = fopen("clientLog.txt", "w" );
			fprintf( fp, "Log file for Client\n===============================\n" );
		}
		else
		{
			fp = fopen("serverLog.txt", "w" );
			fprintf( fp, "Log file for Server\n===============================\n" );
		}
	}
	fprintf( fp, buff );
	fprintf( fp, "\n" );
	fflush(fp);
}


cGameWorld* GetWorld()
{
	iGameObject* pObj = MsgDaemon()->Get( g_gameWorldID );
	return (cGameWorld*) pObj;
}


void ReliableSendToPlayer( cNetMessage& nMsg, objID player )
{
	sMsg msg;
	msg.m_pData = &nMsg;
	msg.m_i[1] = player;
	msg.m_type = msgSendNetMessageR;
	msg.m_dest = g_gameServer;
	SendMessage( msg );
}

void UnreliableSendToPlayer( cNetMessage& nMsg, objID player )
{
	sMsg msg;
	msg.m_pData = &nMsg;
	msg.m_i[1] = player;
	msg.m_type = msgSendNetMessageUR;
	msg.m_dest = g_gameServer;
	SendMessage( msg );
}

void UnreliableBroadcast( cNetMessage& nMsg )
{
	sMsg msg;
	msg.m_pData = &nMsg;
	msg.m_type = msgBroadcastUR;
	msg.m_dest = g_gameServer;
	SendMessage( msg );
}

void ReliableBroadcast( cNetMessage& nMsg )
{
	sMsg msg;
	msg.m_pData = &nMsg;
	msg.m_type = msgBroadcastR;
	msg.m_dest = g_gameServer;
	SendMessage( msg );
}

void ReliableBroadcastExcept( cNetMessage& nMsg, objID exception )
{
	sMsg msg;
	msg.m_pData = &nMsg;
	msg.m_i[1] = exception;
	msg.m_type = msgBroadcastRExcept;
	msg.m_dest = g_gameServer;
	SendMessage( msg );
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -