Exemplo n.º 1
0
        private void DoCommand(string command)
        {
            string[] splits = command.Split(new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries);
            if (splits.Length == 0) return;

            if (splits[0] == "connect")
            {
                if (connection != null)
                {
                    log.Enqueue("can't connect, already in game");
                    return;
                }

                if (splits.Length != 3)
                {
                    log.Enqueue("usage: connect <name> <ip address>");
                    return;
                }

                string ipstr = splits[2].Trim();
                System.Net.IPAddress address;
                if (!System.Net.IPAddress.TryParse(ipstr, out address))
                {
                    log.Enqueue($"invalid ip address: {ipstr}");
                    return;
                }

                log.Enqueue($"Joining server at {ipstr} as {splits[1]}");

                System.Net.IPEndPoint endPoint = new System.Net.IPEndPoint(address, 8945);
                connection = new Connections.NetworkConnection(splits[1], endPoint);
            }
            else if (splits[0] == "local")
            {
                if (connection != null)
                {
                    log.Enqueue("can't create game, already in game");
                    return;
                }

                if (splits.Length != 2)
                {
                    log.Enqueue("usage: local <name>");
                    return;
                }

                log.Enqueue($"Creating local game as {splits[1]}");
                connection = new Connections.LocalConnection(splits[1], "");
            }
            else if (splits[0] == "leave")
            {
                if (connection == null)
                {
                    log.Enqueue("not in game, can't leave");
                    return;
                }

                if (splits.Length != 1)
                {
                    log.Enqueue("usage: leave");
                    return;
                }

                log.Enqueue($"Leaving game");
                connection.LeaveGame();
                //connection = null;
            }
            else
            {
                if (connection == null)
                {
                    log.Enqueue($"unknown command: {splits[0]}");
                    return;
                }

                connection.SendMessage(new HeliumThird.Events.ChatMessage(command));
            }
        }
Exemplo n.º 2
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            if (connection != null)
            {
                connection.Update(1.0 / 60.0);

                HeliumThird.Events.Event input;
                while ((input = connection.ReadMessage()) != null)
                {
                    if (input is HeliumThird.Events.ChatMessage)
                        log.Enqueue((input as HeliumThird.Events.ChatMessage).Message);
                    else if (input is Connections.StatusUpdate.JoinedGame)
                        log.Enqueue("joined game");
                    else if (input is Connections.StatusUpdate.LeftGame)
                    {
                        if ((input as Connections.StatusUpdate.LeftGame).IsError)
                            log.Enqueue($"(error) left game: {(input as Connections.StatusUpdate.LeftGame).Reason}");
                        else
                            log.Enqueue($"left game: {(input as Connections.StatusUpdate.LeftGame).Reason}");

                        connection = null;
                        break;
                    }
                }
            }

            while (log.Count > 20)
                log.Dequeue();

            base.Update(gameTime);
        }