public static void Main(string[] args) { //var app = new App(); //app.Run(); var client = new Client(); client.SessionSaveFilename = "cheese.json"; client.RequestedUsername = "******"; client.Endpoint = "ws://localhost:8888"; client.Start(); bool once = true; int idx = 0; bool shouldStop = false; while (!shouldStop) { if (client.SocketOpenWithIdentity && idx % 10 == 0) { if (once) { Console.WriteLine("Socket Open!"); once = false; } ChatSayMessage request = new ChatSayMessage { say = "Hi!" }; Console.WriteLine("adding ChatSayMessage to queue"); client.SendRequest(request); // var request2 = new GameInstanceListMessage(); // Console.WriteLine("adding GameInstanceList to queue"); // client.SendRequest(request2); // var request3 = new CreateGameInstanceMessage() { GameName = "AssetCollapse", InstanceName = "GameInstance#" + idx }; // Console.WriteLine("creating game instance to queue"); // client.SendRequest(request3); } Message response = client.ReceiveResponse(); if (response != null) { Console.WriteLine("Received response message: " + response.MessageType); if (response.MessageType == MessageTypeNames.ChatSaid) { var msg = (ChatSaidMessage)response; Console.WriteLine(msg.Say); } else if (response.MessageType == MessageTypeNames.GameInstanceListing) { Console.WriteLine(JsonConvert.SerializeObject(response)); } } Thread.Sleep(100); idx++; } }
public void ChatSay(ChatSayMessage message) { Player currentPlayer = _websocket.GetCurrentSessionPlayer(); Assert.ThrowIfNull(currentPlayer, "requires a user session", _websocket); ChatSaid said = new ChatSaid(currentPlayer.Name, message.Say.Truncate(MaxChatStringSize)); _server.Chat.Add(said); ChatSaidMessage chatSaidMessage = new ChatSaidMessage(); chatSaidMessage.PlayerName = said.PlayerName; chatSaidMessage.Say = said.Saying; _websocket.LogMessage($"{currentPlayer.Name} says '{said.Saying}'"); _websocket.Broadcast(chatSaidMessage, currentPlayer.GameInstanceRef, true); }
public void DemoCommands() { _currentPlayer = JsonConvert.DeserializeObject <PlayerClientInfo>(File.ReadAllText(CurrentPlayerFilename)); Console.WriteLine($"Player has saved session as {_currentPlayer.Name} with sessionId = {_currentPlayer.SessionId}"); _webSocket = new WebSocket(_url); _webSocket.OnMessage += (object source, MessageEventArgs e) => { string msgTxt = e.Data.ToString(); Message responseMessage = JsonConvert.DeserializeObject <Message>(msgTxt); if (responseMessage.MessageType == MessageTypeNames.ChatSaid) { OnChatSaid(JsonConvert.DeserializeObject <ChatSaidMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.PlayerListing) { OnPlayerListing(JsonConvert.DeserializeObject <PlayerListingMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.GameInstanceCreated) { OnGameInstanceCreated(JsonConvert.DeserializeObject <GameInstanceCreatedMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.JoinedGameInstance) { OnJoinedGameInstance(JsonConvert.DeserializeObject <JoinedGameInstanceMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.RequestFullState) { OnRequestFullState(JsonConvert.DeserializeObject <RequestFullStateMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.StateChanged) { OnStateChanged(JsonConvert.DeserializeObject <StateChangedMessage>(msgTxt)); } else if (responseMessage.MessageType == MessageTypeNames.ServerError) { OnServerError(JsonConvert.DeserializeObject <ServerErrorMessage>(msgTxt)); } }; try { _webSocket.SetCookie(new Cookie(MessageConstants.SessionCookieName, _currentPlayer.SessionId)); _webSocket.Connect(); } catch (Exception e) { File.Delete(App.CurrentPlayerFilename); _currentPlayer = null; Console.WriteLine(e.Message); } while (_currentPlayer != null) { try { Console.WriteLine("Enter a command:"); string command = Console.ReadLine(); if (command.StartsWith("say ", true, null)) { ChatSayMessage chatSayMessage = new ChatSayMessage(); chatSayMessage.say = command.Substring(4); _webSocket.Send(JsonConvert.SerializeObject(chatSayMessage)); } else if (command.StartsWith("list", true, null)) { PlayerListMessage playerListMessage = new PlayerListMessage(); _webSocket.Send(JsonConvert.SerializeObject(playerListMessage)); } else if (command.StartsWith("rename", true, null)) { string newName = command.Substring("rename".Length + 1); PlayerRenameMessage playerRenameMessage = new PlayerRenameMessage(); playerRenameMessage.Name = newName; _currentPlayer.Name = newName; _webSocket.Send(JsonConvert.SerializeObject(playerRenameMessage)); File.WriteAllText(CurrentPlayerFilename, JsonConvert.SerializeObject(_currentPlayer)); } else if (command.StartsWith("create", true, null)) { string[] parts = command.Split(' '); CreateGameInstanceMessage createGameInstanceMessage = new CreateGameInstanceMessage(); createGameInstanceMessage.GameName = parts[1]; createGameInstanceMessage.InstanceName = parts[2]; _webSocket.Send(JsonConvert.SerializeObject(createGameInstanceMessage)); } else if (command.StartsWith("join", true, null)) { string[] parts = command.Split(' '); JoinGameInstanceMessage joinGameInstanceMessage = new JoinGameInstanceMessage(); joinGameInstanceMessage.GameName = parts[1]; joinGameInstanceMessage.InstanceName = parts[2]; _webSocket.Send(JsonConvert.SerializeObject(joinGameInstanceMessage)); } else if (command.StartsWith("sync", true, null)) { RequestFullStateMessage message = new RequestFullStateMessage(); _webSocket.Send(JsonConvert.SerializeObject(message)); } else if (command.StartsWith("move", true, null)) { StateChangeMessage message = new StateChangeMessage(); StateChange batch = new StateChange(); batch.changes = new List <Change2d>(); Random rnd = new Random(); int randomCount = rnd.Next() % 100; for (int index = 0; index < randomCount; index++) { Change2d change = new Change2d(); change.Event = ChangeEvent.Created; change.ObjectID = rnd.Next().ToString(); change.Transform = new Transform2d { Pos = new Vector2d { X = rnd.NextDouble() * 100.0, Y = rnd.NextDouble() % 100.0 }, Vel = new Vector2d { X = rnd.NextDouble() % 100.0, Y = rnd.NextDouble() % 100.0 }, Rot = rnd.NextDouble() * 380.0, Scale = 1.0 }; batch.changes.Add(change); } message.Payload = batch; _webSocket.Send(JsonConvert.SerializeObject(message)); } else if (command.StartsWith("help", true, null)) { Console.WriteLine("FIXME: add a list of commands"); } else { Console.WriteLine("unknown command"); } } catch (Exception e) { File.Delete(App.CurrentPlayerFilename); this._currentPlayer = null; // causes re-login Console.WriteLine(e.Message); } } try { _webSocket.Close(); _webSocket = null; } catch (Exception e) { File.Delete(App.CurrentPlayerFilename); this._currentPlayer = null; // causes re-login Console.WriteLine(e.Message); } }