/// <summary> /// Procédure appelée quand un message de type Data est reçu ; /// elle trie les messages selon leur type et les traite. /// </summary> /// <param name="inc">Le message entrant</param> public void TreatServerMessage(NetIncomingMessage inc) { ServerMessageTypes messageType = (ServerMessageTypes)inc.ReadByte(); switch (messageType) { case ServerMessageTypes.SendMapSeed: MapSeed = inc.ReadInt32(); break; case ServerMessageTypes.SendPlayerData: RecievedPlayerData = new PlayerDataServer(); RecievedPlayerData.DecodeMessage(inc); break; case ServerMessageTypes.SendNewPlayerNotification: SendNewPlayerNotification nplayer = new SendNewPlayerNotification(); nplayer.DecodeMessage(inc); AddNewPlayer(nplayer.PlayerID, nplayer.Pseudo, nplayer.TeamNumber, nplayer.Weapon); break; case ServerMessageTypes.ConfirmArrival: IsConnected = true; break; case ServerMessageTypes.NewBulletServer: AddNewBullet(inc.ReadInt64(), inc.ReadFloat()); break; case ServerMessageTypes.PlayerRespawn: RespawnPlayer(inc.ReadInt64()); break; case ServerMessageTypes.Death: KillPlayer(inc.ReadInt64()); break; case ServerMessageTypes.Disconnection: PlayerDisconnect msg = new PlayerDisconnect(); msg.DecodeMessage(inc); GamePage.PlayerList.RemoveAll(x => x.Id == msg.ID); GamePage.PlayersToDraw.RemoveAll(x => x.Id == msg.ID); foreach (Team team in Team.TeamList) { team.TeamPlayerList.RemoveAll(x => x.Id == msg.ID); } break; default: break; } }
/// <summary> /// Procédure qui traite les messages de type Data venant des client /// </summary> /// <param name="inc">Le message entrant</param> public void TreatGameMessages(NetIncomingMessage inc) { GameMessageTypes messagetype = (GameMessageTypes)inc.ReadByte(); NetOutgoingMessage outmsg = GameServer.CreateMessage(); switch (messagetype) { case GameMessageTypes.GetMapSeed: NetOutgoingMessage outmsg1 = GameServer.CreateMessage(); SendMapSeed sendmapseed = new SendMapSeed(GameSeed); sendmapseed.EncodeMessage(outmsg1); NetSendResult res = GameServer.SendMessage(outmsg1, inc.SenderConnection, NetDeliveryMethod.ReliableOrdered); break; case GameMessageTypes.SendPlayerData: PlayerDataGame playerdatagame = new PlayerDataGame(); playerdatagame.DecodeMessage(inc); PlayerDataServer playerdataserver = new PlayerDataServer(); playerdataserver.TransferData(playerdatagame); foreach (NetConnection co in GameServer.Connections) { if (co != inc.SenderConnection) { NetOutgoingMessage outmsg2 = GameServer.CreateMessage(); playerdataserver.EncodeMessage(outmsg2); GameServer.SendMessage(outmsg2, co, NetDeliveryMethod.ReliableOrdered); } } break; case GameMessageTypes.SendArrival: NetOutgoingMessage outmsg3 = GameServer.CreateMessage(); SendArrival msg = new SendArrival(); msg.DecodeMessage(inc); if (PlayerList.Count > 0) { foreach (PlayerSignature ps in PlayerList) { SendPlayerListToNewPlayer(ps, inc); } } AddNewPlayerToList(msg.Pseudo, msg.TeamNumber, msg.ID, msg.Weapon, inc.SenderConnection); SendNewPlayerMessage(inc, msg.Pseudo, msg.ID, msg.TeamNumber, msg.Weapon); outmsg3 = GameServer.CreateMessage(); ConfirmArrival nmsg = new ConfirmArrival(); nmsg.EncodeMessage(outmsg3); GameServer.SendMessage(outmsg3, inc.SenderConnection, NetDeliveryMethod.ReliableOrdered); break; case GameMessageTypes.NewBulletGame: NewBulletGame nbmsg = new NewBulletGame(); nbmsg.DecodeMessage(inc); NewBulletServer nbmsg2 = new NewBulletServer(); nbmsg2.TransferData(nbmsg); foreach (NetConnection co in GameServer.Connections) { if (co != inc.SenderConnection) { NetOutgoingMessage outmsg4 = GameServer.CreateMessage(); nbmsg2.EncodeMessage(outmsg4); GameServer.SendMessage(outmsg4, co, NetDeliveryMethod.ReliableOrdered); } } break; case GameMessageTypes.SendPlayerRespawn: RespawnPlayerGame prmsg = new RespawnPlayerGame(); prmsg.DecodeMessage(inc); RespawnPlayerServer prmsg2 = new RespawnPlayerServer(); prmsg2.TransferData(prmsg); foreach (NetConnection co in GameServer.Connections) { if (co != inc.SenderConnection) { NetOutgoingMessage outmsg5 = GameServer.CreateMessage(); prmsg2.EncodeMessage(outmsg5); GameServer.SendMessage(outmsg5, co, NetDeliveryMethod.ReliableOrdered); } } break; case GameMessageTypes.SendDeath: PlayerDeathGame pdmsg = new PlayerDeathGame(); pdmsg.DecodeMessage(inc); PlayerDeathServer pdmsg2 = new PlayerDeathServer(); pdmsg2.TransferData(pdmsg); foreach (NetConnection co in GameServer.Connections) { if (co != inc.SenderConnection) { NetOutgoingMessage outmsg6 = GameServer.CreateMessage(); pdmsg2.EncodeMessage(outmsg6); GameServer.SendMessage(outmsg6, co, NetDeliveryMethod.ReliableOrdered); } } break; case GameMessageTypes.SendDisconnection: SendDisconnectionMessage(inc.ReadInt64(), inc); break; default: break; } }