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)); } }
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); }