//called when a request isnt possible private void RequestDenied(MessageHeader message, int connectID) { RequestDeniedMessage deniedMessage = new RequestDeniedMessage() { DeniedMessageID = message.ID }; SendMessage(deniedMessage, connections[connectID]); }
private void MakeRequestDeniedMessage(NetworkConnection connection, int number) { var requestDenied = new RequestDeniedMessage() { requestDenied = (uint)number }; NetworkManager.SendMessage(networkDriver, requestDenied, connection); }
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(); }
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"); }