コード例 #1
0
    private void boardConfig(String result) //OPCODE 11
    {
        /*
         * Die Response des Boards ist ein 2D Array, das ist richtig. War nicht meine Idee, das so wie in der Doku festzuhalten. Hier ein Beispiel wie die Nachricht aussieht:
         * {opCode: 11, payload: "{"board":[[5,0,6,1,2],[5,1,2,4,0],[3,3,1,5,3],[5,2,2,4,1],[2,1,6,2,4]],"wheel":[6,5,6]}"}
         */
        //nach .Parse(result) mit selectToken probieren falls errors entstehen
        int[,] boardArr = JObject.Parse(result)["board"]?.ToObject <int[, ]>();
        int[] wheelArr = JObject.Parse(result)["wheel"]?.ToObject <int[]>();

        ItemEnums.Item[,] boardArray = new ItemEnums.Item[5, 5];
        ItemEnums.Item[] wheelArray = new ItemEnums.Item[wheelArr.Length];

        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                boardArray[i, j] = Item.GetItem(boardArr[i, j]);
            }
        }
        for (int i = 0; i < wheelArr.Length; i++)
        {
            wheelArray[i] = Item.GetItem(wheelArr[i]);
        }

        EventManager.BoardConfig.Invoke(new BoardConfigEventData(boardArray, wheelArray));
    }
コード例 #2
0
    public virtual void OnDataReceived(object sender, DataReceivedEventArgs e)
    {
        // handle message based on OpCode
        #region M3 OPCODES

        /*{
         *         "board":
         *         [
         *             [1,2,3,4,5],
         *             [1,2,3,4,5],
         *             [1,2,3,4,5],
         *             [1,2,3,4,5],
         *             [1,2,3,4,5]
         *         ],
         *         "wheel": [1,2,3],
         *
         *         "player": "player1ID"
         *     }*/

        #region Event Opcodes

        /*
         * // Networking (opcode at the end)
         * public static PlayerAcceptedEvent PlayerAccepted = new PlayerAcceptedEvent();           //1
         * public static DisconnectEvent Disconect = new DisconnectEvent();                        //2
         * public static PlayAgainEvent playAgain = new PlayAgainEvent();                          //5 sender: Player
         * public static OpponentPlayAgainEvent OponentPlayAgain = new OpponentPlayAgainEvent();   //5
         * public static PlayerReadyEvent PlayerReady = new PlayerReadyEvent();                    //10 sender: Player
         * public static BoardConfigEvent BoardConfig = new BoardConfigEvent();                    //11
         * public static PlayerHasTurn PlayerHasTurn = new PlayerHasTurn();                        //20
         * public static MoveEvent Move = new MoveEvent();                                         //30 sender: Player
         * public static OpponentMoveEvent OpponentMove = new OpponentMoveEvent();                 //30
         * public static GameOverEvent GameOver = new GameOverEvent();                             //40
         * public static OpponentDisconnectEvent OpponentDisconect = new OpponentDisconnectEvent();//300
         * public static InvalidRequestEvent InvalidRequest = new InvalidRequestEvent();           //311
         * public static InvalidMoveEvent InvalidMove = new InvalidMoveEvent();                    //320
         */
        #endregion

        #region Server Opcodes

        /*
         * Sender: Server ->accepted player                //1
         * Sender: Server ->acknowledge player disconnect  //2
         * Sender: player ->player wants to play again     //5
         * Sender: Server ->opponent wants to play again   //5
         * Sender: Server ->opponent left please leave     //300
         */

        #endregion

        #endregion
        string result = BytesToString(e.Data);
        Debug.Log("On Data Received " + result);
        Debug.Log("Opcode " + e.OpCode);
        JObject json = new JObject();
        try
        {
            json = JObject.Parse(result);
        }catch (Exception)
        {
            Debug.Log("json creation error");
        }

        string playerID;
        string message;

        switch (e.OpCode)
        {
        case 1:      //player has been accepted
            EventManager.PlayerAccepted.Invoke(result);
            break;

        case 2:      //player has disconnected
            EventManager.Disconect.Invoke(result);
            break;

        case 5:      //opponent wants to play again
            EventManager.OponentPlayAgain.Invoke();
            break;

        case 10:     //both players connected
            Payload payload = new Payload("");
            SendStringToServer(10, payload);
            //playerID = JObject.Parse(result)["playerId"].ToString();

            /*GameManager.Instance.Me.SetPlayerID(playerID);
             * EventManager.PlayerReady.Invoke();*/
            break;

        case 11:     //both players ready
            Debug.Log("boardConfig received");
            boardConfig(result);
            break;

        case 20:     //player x has turn
            playerID = JObject.Parse(result)["playerId"].ToString();
            if (playerID == GameManager.Instance.Me.GetPlayerID())
            {
                EventManager.PlayerHasTurn.Invoke(GameManager.Instance.Me);
            }
            else
            {
                EventManager.PlayerHasTurn.Invoke(GameManager.Instance.Opponent);
            }
            break;

        case 30:     //its my turn
            //prevMove: X (e.g. “L1”) newCard: Y (numbers 0 - 6)
            //lo-ol
            string          prevMove = json["prevMove"].ToString();
            BoardEnums.Slot slot     = (BoardEnums.Slot)prevMove[1];
            BoardEnums.Row  row      = (BoardEnums.Row)Int32.Parse(prevMove.Substring(0, 1));
            ItemEnums.Item  item     = Item.GetItem((int)json["newCard"]);
            EventManager.OpponentMove.Invoke(new OpponentMoveEventData(row, slot, item));
            break;

        case 40:     //game ends
            playerID = JObject.Parse(result)["playerId"].ToString();
            if (playerID == GameManager.Instance.Me.GetPlayerID())
            {
                EventManager.GameOver.Invoke(GameManager.Instance.Me);
            }
            else
            {
                EventManager.GameOver.Invoke(GameManager.Instance.Opponent);
            }
            break;

        case 300:     //opponent disconnected please leave session
            message = JObject.Parse(result)["error"].ToString();
            EventManager.Disconect.Invoke(message);
            break;

        case 311:     //player didnt send the correct data
            message = JObject.Parse(result)["error"].ToString();
            EventManager.InvalidRequest.Invoke(message);
            break;

        case 320:     //turn was incorrect(game rules)
            message = JObject.Parse(result)["error"].ToString();
            EventManager.InvalidMove.Invoke(message);
            break;

        default:
            Debug.Log("Default case in switchCase");
            break;
        }
        Debug.Log("outside switchcase");
    }