示例#1
0
        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;
        }
示例#2
0
        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
                    }
                }
            }
        }