示例#1
0
        public void PlayerList(PlayerListMessage message)
        {
            Player currentPlayer = _websocket.GetCurrentSessionPlayer();

            Assert.ThrowIfNull(currentPlayer, "requires a user session", _websocket);
            PlayerListingMessage playerListingMessage = new PlayerListingMessage();

            playerListingMessage.Players = Server.Instance.Players;
            _websocket.Broadcast(playerListingMessage, null, true);
        }
示例#2
0
        public void PlayerRename(PlayerRenameMessage message)
        {
            Player currentPlayer = _websocket.GetCurrentSessionPlayer();

            Assert.ThrowIfNull(currentPlayer, "requires a user session", _websocket);
            currentPlayer.Name = message.Name.Truncate(50);
            _server.playerRepository.UpdatePlayer(currentPlayer);
            PlayerListingMessage playerListingMessage = new PlayerListingMessage();

            playerListingMessage.Players = Server.Instance.Players;
            _websocket.Broadcast(playerListingMessage, null, true);
        }
示例#3
0
 void OnPlayerListing(PlayerListingMessage message)
 {
     Console.WriteLine("Players Online:");
     Console.WriteLine("---------------");
     foreach (Player player in message.Players)
     {
         Console.Write($"Player {player.Name}");
         if (player.GameInstanceRef != null)
         {
             Console.WriteLine($" in game instance {JsonConvert.SerializeObject(player)}");
         }
         else
         {
             Console.WriteLine(" not in a game instance");
         }
     }
     ;
 }
示例#4
0
 public void OnStateFluxPlayerListing(PlayerListingMessage message)
 {
     ClearPlayerListView();
     if (_playersPanelContent == null)
     {
         return;
     }
     foreach (Player p in message.Players)
     {
         _players.Add(p);
         GameObject row         = GameObject.Instantiate(playerRowPrefab, _playersPanelContent.transform);
         var        textMeshPro = row.GetComponentInChildren <TextMeshProUGUI>();
         textMeshPro.text = p.Name;
         if (p.Color != null)
         {
             textMeshPro.color = StateFluxTypeConvert.Convert(p.Color);
         }
     }
 }
示例#5
0
        protected override void OnClose(CloseEventArgs closeEventArgs)
        {
            try
            {
                Player currentPlayer = GetCurrentSessionPlayer();
                if (currentPlayer == null)
                {
                    return;
                }

                LogMessage($"Connection closed");

                IEnumerable <Player> players = Server.Instance.Players;

                var playerListingMessage = new PlayerListingMessage
                {
                    Players = Server.Instance.Players.Where(p => p.SessionData.SessionId != currentPlayer.SessionData.SessionId).ToList()
                };
                Broadcast(playerListingMessage, null, false);

                if (currentPlayer.GameInstanceRef != null)
                {
                    // player is in a game instance!
                    var gameInstanceStoppedMessage = new GameInstanceStoppedMessage
                    {
                        GameInstance = currentPlayer.GameInstanceRef,
                        Host         = Server.Instance.LookupInstance(currentPlayer.GameInstanceRef.Id).HostPlayer
                    };
                    Broadcast(gameInstanceStoppedMessage, null, false);
                    LogMessage($"Broadcasting GameInstanceStopped for game instance {currentPlayer.GameInstanceRef.GameName}:{currentPlayer.GameInstanceRef.Name}");
                }

                Server.Instance.RemoveGameInstance(currentPlayer);
                Server.Instance.Players.Remove(currentPlayer);
            }
            finally
            {
                base.OnClose(closeEventArgs);
            }
        }
示例#6
0
    IEnumerator ReceiveAndDispatchMessages()
    {
        while (!connection.SocketOpenWithIdentity)
        {
            foreach (var listener in listeners)
            {
                listener.OnStateFluxWaitingToConnect();
            }
            yield return(new WaitForSeconds(1));
        }

        while (true)
        {
            openWithIdentity = connection.SocketOpenWithIdentity;
            if (!connected && openWithIdentity)
            {
                connected = true;
                userName  = connection.UserName;
                foreach (var listener in listeners)
                {
                    listener.OnStateFluxConnect();
                }
            }
            else if (connected && !openWithIdentity)
            {
                connected = false;
                userName  = "";
                foreach (var listener in listeners)
                {
                    listener.OnStateFluxDisconnect();
                }
            }

            bool draining      = true;
            int  drainingCount = 50;
            while (draining && (drainingCount--) > 0)
            {
                StateFlux.Model.Message message = connection.ReceiveResponse();
                draining = (message != null);
                if (draining)
                {
                    if (message.MessageType == MessageTypeNames.HostStateChanged)
                    {
                        // FIXME: convert all the others to linq method ForEach
                        listeners.ForEach(l => l.OnStateFluxHostStateChanged((HostStateChangedMessage)message));
                    }
                    else if (message.MessageType == MessageTypeNames.MiceChanged)
                    {
                        MiceChangedMessage msg = (MiceChangedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxMiceChanged(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.HostCommandChanged)
                    {
                        HostCommandChangedMessage msg = (HostCommandChangedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxHostCommandChanged(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GuestCommandChanged)
                    {
                        GuestCommandChangedMessage msg = (GuestCommandChangedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGuestCommandChanged(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GuestInputChanged)
                    {
                        GuestInputChangedMessage msg = (GuestInputChangedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGuestInputChanged(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.PlayerListing)
                    {
                        PlayerListingMessage msg = (PlayerListingMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxPlayerListing(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceCreated)
                    {
                        GameInstanceCreatedMessage msg = (GameInstanceCreatedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceCreated(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceListing)
                    {
                        GameInstanceListingMessage msg = (GameInstanceListingMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceListing(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceJoined)
                    {
                        GameInstanceJoinedMessage msg = (GameInstanceJoinedMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceJoined(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceStart)
                    {
                        GameInstanceStartMessage msg = (GameInstanceStartMessage)message;
                        Debug.Log($"Game start message, host is {msg.Host.Name}");
                        Debug.Log($"Current player name is {connection.CurrentPlayer.Name}");
                        isHosting = (msg.Host.Name == connection.CurrentPlayer.Name);
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceStart(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceStopped)
                    {
                        GameInstanceStoppedMessage msg = (GameInstanceStoppedMessage)message;
                        Debug.Log($"Game stopped message, host is {msg.Host.Name}");
                        Debug.Log($"Current player name is {connection.CurrentPlayer.Name}");
                        isHosting = (msg.Host.Name == connection.CurrentPlayer.Name);
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceStopped(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.GameInstanceLeft)
                    {
                        GameInstanceLeftMessage msg = (GameInstanceLeftMessage)message;
                        Debug.Log($"Player {msg.Player.Name} left {msg.GameName}:{msg.InstanceName}");
                        Debug.Log($"Current player name is {connection.CurrentPlayer.Name}");
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxGameInstanceLeft(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.ChatSaid)
                    {
                        ChatSaidMessage msg = (ChatSaidMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxChatSaid(msg);
                        }
                    }
                    else if (message.MessageType == MessageTypeNames.ServerError)
                    {
                        ServerErrorMessage msg = (ServerErrorMessage)message;
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxServerError(msg);
                        }
                    }
                    else
                    {
                        foreach (var listener in listeners)
                        {
                            listener.OnStateFluxOtherMessage(message);
                        }
                    }
                }
            }

            yield return(null);
        }
    }
示例#7
0
 public void OnStateFluxPlayerListing(PlayerListingMessage message)
 {
 }