public void AssignClient(HFTSocket client, HFTRuntimeOptions data)
{
if (client_ != null)
{
log_.Error("this game already has a client!");
client_.OnMessageEvent -= OnMessage;
client_.OnCloseEvent -= OnDisconnect;
client_.Close();
}
client_ = client;
client.OnMessageEvent += OnMessage;
client.OnCloseEvent += OnDisconnect;
RegisterCmdHandler <object>("client", SendMessageToPlayer);
RegisterCmdHandler <object>("broadcast", Broadcast);
RegisterCmdHandler <HFTMessageSwitchGame>("switchGame", SwitchGame);
RegisterCmdHandler <object>("peer", SendMessageToGame);
RegisterCmdHandler <object>("bcastToGames", BroadcastToGames);
RegisterCmdHandler <HFTMessageAddFile>("addFile", AddFile);
// Tell the game it's id
var gs = new HFTMessageGameStart();
gs.id = id_;
gs.gameId = ""; //FIX!
client.Send(new HFTRelayToGameMessage("gamestart", "", gs));
// start each player
foreach (var player in players_.Values)
{
client.Send(new HFTRelayToGameMessage("start", player.id, null));
}
// Not sure why I even have a sendQueue
// as the game should be running before anyone
// joins but it seems to be useful for debugging
// since contollers start and often immediately
// send a name and color cmd.
foreach (var pair in sendQueue_.ToArray())
{
client.Send(pair.Value);
}
sendQueue_.Clear();
}