//called when a request isnt possible
    private void RequestDenied(MessageHeader message, int connectID)
    {
        RequestDeniedMessage deniedMessage = new RequestDeniedMessage()
        {
            DeniedMessageID = message.ID
        };

        SendMessage(deniedMessage, connections[connectID]);
    }
Exemplo n.º 2
0
    private void MakeRequestDeniedMessage(NetworkConnection connection, int number)
    {
        var requestDenied = new RequestDeniedMessage()
        {
            requestDenied = (uint)number
        };

        NetworkManager.SendMessage(networkDriver, requestDenied, connection);
    }
Exemplo n.º 3
0
    public void ShowErrorCode(MessageHeader errorCode)
    {
        RequestDeniedMessage deniedMessage = errorCode as RequestDeniedMessage;
        uint   number  = deniedMessage.requestDenied;
        string explain = DeniedMessageRules.DeniedMessages[deniedMessage.requestDenied];

        deniedText.text = explain;
        ToggleDeniedGameObject();
        SideMenu.SlideMenu();

        switch ((int)number)
        {
        case 0:
            SwitchToConnectionPanel();
            break;

        case 1:
            SwitchToConnectionPanel();
            break;
        }

        TimerManager.Instance.AddTimer(ToggleDeniedGameObject, 5);
    }
    public void Update()
    {
        networkJobHandle.Complete();

        if (!connection.IsCreated)
        {
            return;
        }

        DataStreamReader reader;

        NetworkEvent.Type cmd;
        while ((cmd = connection.PopEvent(networkDriver, out reader)) != NetworkEvent.Type.Empty)
        {
            if (cmd == NetworkEvent.Type.Connect)
            {
                Debug.Log("Connected to server");
            }
            else if (cmd == NetworkEvent.Type.Data)
            {
                var messageType = (Message.MessageType)reader.ReadUShort();
                Debug.Log("Client Received: " + messageType + " from Host");

                Message message = null;
                switch (messageType)
                {
                case Message.MessageType.None: break;

                case Message.MessageType.NewPlayer: message = new NewPlayerMessage(); break;

                case Message.MessageType.Welcome: message = new WelcomeMessage(); break;

                case Message.MessageType.RequestDenied: message = new RequestDeniedMessage(); break;

                case Message.MessageType.PlayerLeft: message = new PlayerLeftMessage(); break;

                case Message.MessageType.StartGame: message = new StartGameMessage(); break;

                case Message.MessageType.PlayerTurn: message = new PlayerTurnMessage(); break;

                case Message.MessageType.RoomInfo: message = new RoomInfoMessage(); break;

                case Message.MessageType.PlayerEnterRoom: message = new PlayerEnterRoomMessage(); break;

                case Message.MessageType.PlayerLeaveRoom: message = new PlayerLeaveRoomMessage(); break;

                case Message.MessageType.ObtainTreasure: message = new ObtainTreasureMessage(); break;

                case Message.MessageType.HitMonster: message = new HitMonserMessage(); break;

                case Message.MessageType.HitByMonster: message = new HitByMonserMessage(); break;

                case Message.MessageType.PlayerDefends: message = new PlayerDefendsMessage(); break;

                case Message.MessageType.PlayerLeftDungeon: message = new PlayerLeftDungeonMessage(); break;

                case Message.MessageType.PlayerDies: message = new PlayerDiesMessage(); break;

                case Message.MessageType.EndGame:   break;

                default: break;
                }
                if (message != null)
                {
                    message.DeserializeObject(ref reader);
                    receivedMessagesQueue.Enqueue(message);
                }
            }
            else if (cmd == NetworkEvent.Type.Disconnect)
            {
                Debug.Log("Disconnected from server");
                connection = default;
            }
        }
        ProcessMessagesQueue();

        if (Time.time - lastSendTime > STAY_ALIVE_AFTER_SECONDS)
        {
            SendMessage(new NoneMessage());
        }
        networkJobHandle = networkDriver.ScheduleUpdate();
    }
Exemplo n.º 5
0
    private INetworkMessage ReadCaveQuestMessage(DataStreamReader reader, Message message)
    {
        switch (message.messageType)
        {
        case MessageType.PlayerTurn:
            var playerTurnMessage = new PlayerMessage(message.id, message.messageType);
            playerTurnMessage.Deserialize(ref reader);

            turn = playerTurnMessage.playerID == playerID;

            UpdateUI(turn);

            return(playerTurnMessage);

        case MessageType.RoomInfo:
            var roomInfo = new RoomInfo(message.id);
            roomInfo.Deserialize(ref reader);

            currentRoomInfo = roomInfo;
            StartCoroutine(DrawRoom(roomInfo));

            return(roomInfo);

        case MessageType.PlayerEnterRoom:
            var playerEnterRoom = new PlayerMessage(message.id, message.messageType);
            playerEnterRoom.Deserialize(ref reader);

            foreach (var textMesh in FindObjectsOfType <TextMesh>())
            {
                if (textMesh.text == playerEnterRoom.playerID.ToString())
                {
                    Destroy(textMesh.transform.parent.gameObject);
                    break;
                }
            }

            currentRoomInfo.numberOfOtherPlayers++;
            var otherPlayerIDs = new NativeArray <int>(currentRoomInfo.numberOfOtherPlayers, Allocator.Temp, NativeArrayOptions.UninitializedMemory);
            for (int i = 0; i < currentRoomInfo.otherPlayerIDs.Length; i++)
            {
                var otherPlayerID = currentRoomInfo.otherPlayerIDs[i];
                otherPlayerIDs[i] = otherPlayerID;
            }
            otherPlayerIDs[currentRoomInfo.numberOfOtherPlayers - 1] = playerEnterRoom.playerID;
            currentRoomInfo.otherPlayerIDs = otherPlayerIDs.ToArray();
            otherPlayerIDs.Dispose();

            DrawPlayer(playerEnterRoom.playerID);

            return(playerEnterRoom);

        case MessageType.PlayerLeaveRoom:
            var playerLeaveRoom = new PlayerMessage(message.id, message.messageType);
            playerLeaveRoom.Deserialize(ref reader);

            foreach (var textMesh in FindObjectsOfType <TextMesh>())
            {
                if (textMesh.text == playerLeaveRoom.playerID.ToString())
                {
                    Destroy(textMesh.transform.parent.gameObject);
                    break;
                }
            }

            currentRoomInfo.numberOfOtherPlayers--;
            otherPlayerIDs = new NativeArray <int>(currentRoomInfo.numberOfOtherPlayers, Allocator.Temp, NativeArrayOptions.UninitializedMemory);
            bool tempBool = false;
            for (int i = 0; i < currentRoomInfo.otherPlayerIDs.Length; i++)
            {
                var otherPlayerID = currentRoomInfo.otherPlayerIDs[i];
                if (otherPlayerID == playerLeaveRoom.playerID)
                {
                    tempBool = true;
                    continue;
                }

                var i2 = (tempBool) ? i - 1 : i;
                otherPlayerIDs[i2] = otherPlayerID;
            }
            currentRoomInfo.otherPlayerIDs = otherPlayerIDs.ToArray();
            otherPlayerIDs.Dispose();

            return(playerLeaveRoom);

        case MessageType.ObtainTreasure:
            var obtainTreasureMessage = new ObtainTreasure(message.id);
            obtainTreasureMessage.Deserialize(ref reader);

            coinDisplay.text = (int.Parse(coinDisplay.text) + obtainTreasureMessage.amount).ToString();
            currentRoomInfo.treasureInRoom = 0;

            foreach (var hit in Physics2D.BoxCastAll(Vector2.zero, Vector2.one, 0, Vector2.zero, float.PositiveInfinity, LayerMask.GetMask("Raycast Target")))
            {
                if (hit.transform.name == "Treasure(Clone)")
                {
                    Destroy(hit.transform.gameObject);
                    break;
                }
            }

            return(obtainTreasureMessage);

        case MessageType.HitMonster:
            var hitMonsterMessage = new AttackMessage(message.id, message.messageType);
            hitMonsterMessage.Deserialize(ref reader);

            if (hitMonsterMessage.playerID == playerID || currentRoomInfo.otherPlayerIDs.Contains(hitMonsterMessage.playerID))
            {
                if (!(currentRoomInfo.containsMonster = false))
                {
                    foreach (var hit in Physics2D.BoxCastAll(Vector2.zero, Vector2.one, 0, Vector2.zero, float.PositiveInfinity, LayerMask.GetMask("Raycast Target")))
                    {
                        if (hit.transform.name == "Monster(Clone)")
                        {
                            Destroy(hit.transform.gameObject);
                            break;
                        }
                    }
                }
            }

            return(hitMonsterMessage);

        case MessageType.HitByMonster:
            var hitByMonsterMessage = new AttackMessage(message.id, message.messageType);
            hitByMonsterMessage.Deserialize(ref reader);

            if (playerID == hitByMonsterMessage.playerID)
            {
                healthDisplay.text = hitByMonsterMessage.value.ToString();
            }

            return(hitByMonsterMessage);

        case MessageType.PlayerDefends:
            var playerDefendMessage = new AttackMessage(message.id, message.messageType);
            playerDefendMessage.Deserialize(ref reader);

            return(playerDefendMessage);

        case MessageType.PlayerLeftDungeon:
            var playerLeftDungeon = new PlayerMessage(message.id, message.messageType);
            playerLeftDungeon.Deserialize(ref reader);

            foreach (var textMesh in FindObjectsOfType <TextMesh>())
            {
                if (textMesh.text == playerLeftDungeon.playerID.ToString())
                {
                    Destroy(textMesh.transform.parent.gameObject);
                    break;
                }
            }

            return(playerLeftDungeon);

        case MessageType.PlayerDies:
            var playerDiesMessage = new PlayerMessage(message.id, message.messageType);
            playerDiesMessage.Deserialize(ref reader);

            return(playerDiesMessage);

        case MessageType.EndGame:
            var endGameMessage = new EndGameMessage(message.id);
            endGameMessage.Deserialize(ref reader);

            SceneManager.LoadSceneAsync("Ending Screen").completed += (asyncOperation) =>
            {
                foreach (var highScore in endGameMessage.highScores.OrderByDescending(pair => pair.Value))
                {
                    var endingScreenUIBinder = FindObjectOfType <EndingScreenUIBinder>();
                    endingScreenUIBinder.SpawnHighScoreUIField(highScore.Key, highScore.Value);
                }
            };
            Destroy(this);

            return(endGameMessage);

        case MessageType.RequestDenied:
            var requestDeniedMessage = new RequestDeniedMessage(message.id);
            requestDeniedMessage.Deserialize(ref reader);

            return(requestDeniedMessage);

        case MessageType.PlayerLeft:
            var playerLeftMessage = new PlayerMessage(message.id, message.messageType);
            playerLeftMessage.Deserialize(ref reader);

            foreach (var textMesh in FindObjectsOfType <TextMesh>())
            {
                if (textMesh.text == playerLeftMessage.playerID.ToString())
                {
                    Destroy(textMesh.transform.parent.gameObject);
                    break;
                }
            }

            return(playerLeftMessage);

        default:
            return(null);
        }
    }
        public void HandleRequestDenied(Message message)
        {
            RequestDeniedMessage requestDeniedMessage = (RequestDeniedMessage)message;

            Menu.Singleton.gameWindow.OutputText("Request Denied: Whatever you did is not allowed");
        }