public static PD createPd(byte[] data) { int pdType = 0x000000FF & (int)data[0]; E_PD_TYPE pdTypeEnum = (E_PD_TYPE)pdType; PD pd = null; MemoryStream ms = new MemoryStream(data); BinaryReader br = new BinaryReader(ms); switch (pdTypeEnum) { case E_PD_TYPE.AUTHENTIFICATION_RESP: pd = new PDAuthentificationResp(); pd.unmarshal(br); break; case E_PD_TYPE.AUTHENTIFICATION: pd = new PDAuthentification(); pd.unmarshal(br); break; case E_PD_TYPE.DELETEPLAYER: pd = new PDDeletePlayer(); pd.unmarshal(br); break; case E_PD_TYPE.DELETETABLE: pd = new PDDeleteTable(); pd.unmarshal(br); break; case E_PD_TYPE.INSERTPLAYER: pd = new PDInsertPlayer(); pd.unmarshal(br); break; case E_PD_TYPE.INSERTTABLE: pd = new PDInsertTable(); pd.unmarshal(br); break; case E_PD_TYPE.UPDATEPPLAYERSTATE: pd = new PDUpdatePlayerState(); pd.unmarshal(br); break; case E_PD_TYPE.UPDATETABLESTATE: pd = new PDUpdateTableState(); pd.unmarshal(br); break; case E_PD_TYPE.UPDATECELL: pd = new PDUpdateCell(); pd.unmarshal(br); break; case E_PD_TYPE.UPDATECELLREQUEST: pd = new PDUpdateCellRequest(); pd.unmarshal(br); break; case E_PD_TYPE.UPDATEPPLAYERTABLESTATE: pd = new PDUpdatePlayerTableState(); pd.unmarshal(br); break; case E_PD_TYPE.PUBLICCHAT: pd = new PDPublicChat(); pd.unmarshal(br); break; case E_PD_TYPE.PRIVATECHAT: pd = new PDPrivateChat(); pd.unmarshal(br); break; case E_PD_TYPE.NEWTABLE: pd = new PDNewTable(); pd.unmarshal(br); break; case E_PD_TYPE.JOINTABLE: pd = new PDJoinTable(); pd.unmarshal(br); break; case E_PD_TYPE.JOINTABLERESPONSE: pd = new PDJoinTableResponse(); pd.unmarshal(br); break; case E_PD_TYPE.EXITTABLE: pd = new PDExitTable(); pd.unmarshal(br); break; case E_PD_TYPE.STARTTABLEGAME: pd = new PDStartTableGame(); pd.unmarshal(br); break; case E_PD_TYPE.GAMEFINISH: pd = new PDGameFinish(); pd.unmarshal(br); break; case E_PD_TYPE.LISTOFPLAYERREQUEST: pd = new PDListOfPlayerRequest(); pd.unmarshal(br); break; case E_PD_TYPE.LISTOFTABLEREQUEST: pd = new PDListOfPlayerRequest(); pd.unmarshal(br); break; case E_PD_TYPE.ERROR: pd = new PDError(); pd.unmarshal(br); break; } br.Close(); return pd; }
public void jointTable(PlayerObserver player) { lock(joinLock){ //Verifier si la table n'est pas pleine //Le joueur n'a pas join déjà la table //Si table complete envoyer la grille if (m_players.ContainsKey(player.ThisPlayer.PlayerID)) { //\todo le joueur a déjà rejoin la table return; } else if (m_players.Count >= m_tableNumPlayer) { //il y a plus de place player.SocketClient.sendPacket(new PDError(0, "Désolé il n y a plus de place dans cette table")); } else { PlayerTable pt = new PlayerTable(); if ((pt.Number = findFreeNumberPlayer()) != 0) { pt.Player = player; pt.Score = 0; m_players.Add(player.ThisPlayer.PlayerID, pt); player.PlayerTableChatSendEvent += player_PlayerTableChatSendEvent; player.PlayerUpdateTableCellEvent += player_PlayerUpdateTableCellEvent; uint[] playersID = new uint[m_players.Count]; int i = 0; foreach (var item in m_players) { playersID[i] = item.Value.Player.ThisPlayer.PlayerID; i++; } PDJoinTableResponse pdres = new PDJoinTableResponse(TableID, (byte)DifficultyLevel, (byte)m_tableNumPlayer); player.SocketClient.sendPacket(pdres); System.Threading.Thread.Sleep(0); if(!startGameIfPossible()) { PDUpdateTableState pd = new PDUpdateTableState(TableID, playersID); sendToAllTablePlayer(pd); System.Threading.Thread.Sleep(0); } } else { //\todo impossible mais erreur } } } }