/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ /***************************************************************************** * * $/Plasma20/Sources/Plasma/FeatureLib/pfGameMgr/VarSync/pfGmVarSync.cpp * ***/ #define USES_GAME_VARSYNC #include "../Pch.h" #pragma hdrstop /***************************************************************************** * * Local types * ***/ struct IVarSync { pfGmVarSync * gameCli; IVarSync (pfGmVarSync * gameCli); // pfGameCli event notification handlers void Recv (GameMsgHeader * msg, void * param); void OnPlayerJoined (const Srv2Cli_Game_PlayerJoined & msg); void OnPlayerLeft (const Srv2Cli_Game_PlayerLeft & msg); void OnInviteFailed (const Srv2Cli_Game_InviteFailed & msg); void OnOwnerChange (const Srv2Cli_Game_OwnerChange & msg); // VarSync network message handlers void RecvStringVarChanged (const Srv2Cli_VarSync_StringVarChanged & msg, void * param); void RecvNumericVarChanged (const Srv2Cli_VarSync_NumericVarChanged & msg, void * param); void RecvAllVarsSent (const Srv2Cli_VarSync_AllVarsSent & msg, void * param); void RecvStringVarCreated (const Srv2Cli_VarSync_StringVarCreated & msg, void * param); void RecvNumericVarCreated (const Srv2Cli_VarSync_NumericVarCreated & msg, void * param); }; /***************************************************************************** * * Factory functions * ***/ //============================================================================ static pfGameCli * VarSyncFactory ( unsigned gameId, plKey receiver ) { return NEWZERO(pfGmVarSync)(gameId, receiver); } //============================================================================ AUTO_INIT_FUNC(RegisterVarSyncFactory) { static GameTypeReg reg = { VarSyncFactory, kGameTypeId_VarSync, L"VarSync" }; GameMgrRegisterGameType(reg); } /***************************************************************************** * * IVarSync * ***/ //============================================================================ IVarSync::IVarSync (pfGmVarSync * gameCli) : gameCli(gameCli) { } //============================================================================ void IVarSync::OnPlayerJoined (const Srv2Cli_Game_PlayerJoined & msg) { pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::OnPlayerLeft (const Srv2Cli_Game_PlayerLeft & msg) { pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::OnInviteFailed (const Srv2Cli_Game_InviteFailed & msg) { pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::OnOwnerChange (const Srv2Cli_Game_OwnerChange & msg) { pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::RecvStringVarChanged (const Srv2Cli_VarSync_StringVarChanged & msg, void * param) { ref(param); pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::RecvNumericVarChanged (const Srv2Cli_VarSync_NumericVarChanged & msg, void * param) { ref(param); pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::RecvAllVarsSent (const Srv2Cli_VarSync_AllVarsSent & msg, void * param) { ref(param); pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::RecvStringVarCreated (const Srv2Cli_VarSync_StringVarCreated & msg, void * param) { ref(param); pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } //============================================================================ void IVarSync::RecvNumericVarCreated (const Srv2Cli_VarSync_NumericVarCreated & msg, void * param) { ref(param); pfGameCliMsg * gameCliMsg = NEWZERO(pfGameCliMsg); gameCliMsg->Set(gameCli, msg); gameCliMsg->Send(gameCli->GetReceiver()); } /***************************************************************************** * * pfGmVarSync * ***/ //============================================================================ pfGmVarSync::pfGmVarSync ( unsigned gameId, plKey receiver ) : pfGameCli(gameId, receiver) { internal = NEWZERO(IVarSync)(this); } //============================================================================ pfGmVarSync::~pfGmVarSync () { DEL(internal); } //============================================================================ void pfGmVarSync::Recv (GameMsgHeader * msg, void * param) { #define DISPATCH(a) case kSrv2Cli_VarSync_##a: { \ const Srv2Cli_VarSync_##a & m = *(const Srv2Cli_VarSync_##a *)msg; \ internal->Recv##a(m, param); \ } \ break; // switch (msg->messageId) { DISPATCH(StringVarChanged); DISPATCH(NumericVarChanged); DISPATCH(AllVarsSent); DISPATCH(StringVarCreated); DISPATCH(NumericVarCreated); DEFAULT_FATAL(msg->messageId); } #undef DISPATCH } //============================================================================ void pfGmVarSync::OnPlayerJoined (const Srv2Cli_Game_PlayerJoined & msg) { internal->OnPlayerJoined(msg); } //============================================================================ void pfGmVarSync::OnPlayerLeft (const Srv2Cli_Game_PlayerLeft & msg) { internal->OnPlayerLeft(msg); } //============================================================================ void pfGmVarSync::OnInviteFailed (const Srv2Cli_Game_InviteFailed & msg) { internal->OnInviteFailed(msg); } //============================================================================ void pfGmVarSync::OnOwnerChange (const Srv2Cli_Game_OwnerChange & msg) { internal->OnOwnerChange(msg); } //============================================================================ void pfGmVarSync::SetStringVar (unsigned long id, const wchar* val) { Cli2Srv_VarSync_SetStringVar msg; msg.messageId = kCli2Srv_VarSync_SetStringVar; msg.messageBytes = sizeof(msg); msg.recvGameId = GetGameId(); // send to GameSrv on server msg.transId = 0; msg.varID = id; StrCopy(msg.varValue, val, arrsize(msg.varValue)); GameMgrSend(&msg); } //============================================================================ void pfGmVarSync::SetNumericVar (unsigned long id, double val) { Cli2Srv_VarSync_SetNumericVar msg; msg.messageId = kCli2Srv_VarSync_SetNumericVar; msg.messageBytes = sizeof(msg); msg.recvGameId = GetGameId(); // send to GameSrv on server msg.transId = 0; msg.varID = id; msg.varValue = val; GameMgrSend(&msg); } //============================================================================ void pfGmVarSync::RequestAllVars () { Cli2Srv_VarSync_RequestAllVars msg; msg.messageId = kCli2Srv_VarSync_RequestAllVars; msg.messageBytes = sizeof(msg); msg.recvGameId = GetGameId(); // send to GameSrv on server msg.transId = 0; GameMgrSend(&msg); } //============================================================================ void pfGmVarSync::CreateStringVar (const wchar* name, const wchar* val) { Cli2Srv_VarSync_CreateStringVar msg; msg.messageId = kCli2Srv_VarSync_CreateStringVar; msg.messageBytes = sizeof(msg); msg.recvGameId = GetGameId(); // send to GameSrv on server msg.transId = 0; StrCopy(msg.varName, name, arrsize(msg.varName)); StrCopy(msg.varValue, val, arrsize(msg.varValue)); GameMgrSend(&msg); } //============================================================================ void pfGmVarSync::CreateNumericVar (const wchar* name, double val) { Cli2Srv_VarSync_CreateNumericVar msg; msg.messageId = kCli2Srv_VarSync_CreateNumericVar; msg.messageBytes = sizeof(msg); msg.recvGameId = GetGameId(); // send to GameSrv on server msg.transId = 0; StrCopy(msg.varName, name, arrsize(msg.varName)); msg.varValue = val; GameMgrSend(&msg); }