public void DataMessageFromExchangeRequestAddresseeReceived() { InitGameMaster(); var sender = GetPlayer("testGUID-1111", 1, TeamColour.blue, ActionType.none); var addressee = GetPlayer("testGUID-9999", 9, TeamColour.blue, ActionType.none); sender.SetLocation(1, 3); addressee.SetLocation(2, 6); defaultGameMaster.RegisterPlayer(sender, sender.GUID, findFreeLocationAndPlacePlayer: false); defaultGameMaster.RegisterPlayer(addressee, addressee.GUID, findFreeLocationAndPlacePlayer: false); defaultGameMaster.exchangeRequestList.Add(new ExchengeRequestContainer(1, 9)); defaultGameMaster.exchangeRequestList[0].SenderData = new DataMessage(9); var msg = new DataMessage(1); // action var result = defaultGameMaster.HandleData(msg); var message1 = (Data)MessageParser.Deserialize(result[0]); var message2 = (Data)MessageParser.Deserialize(result[1]); // assert Assert.AreEqual(typeof(string[]), result.GetType()); Assert.IsTrue(result.Length == 2); Assert.IsTrue(defaultGameMaster.exchangeRequestList.Count == 0); Assert.AreEqual(1ul, message1.playerId); Assert.AreEqual(9ul, message2.playerId); }
// This is all a hack until VSSDK LanguageServer can handle workspace folders and dynamic registration private Tuple <StreamData, bool> OnSendToServer(StreamData data) { var message = MessageParser.Deserialize(data); if (message != null) { if (_isDebugging) { System.Diagnostics.Debug.WriteLine($"*** Sending pylance: {message.ToString()}"); } try { // If this is the initialize method, add the workspace folders capability if (message.Value <string>("method") == "initialize") { if (message.TryGetValue("params", out JToken messageParams)) { var capabilities = messageParams["capabilities"]; if (capabilities != null) { if (capabilities["workspace"] == null) { capabilities["workspace"] = JToken.FromObject(new { }); } capabilities["workspace"]["workspaceFolders"] = true; capabilities["workspace"]["didChangeWatchedFiles"]["dynamicRegistration"] = true; capabilities["workspace"]["configuration"] = true; // Root path and root URI should not be sent. They're deprecated and will // just confuse pylance with respect to what is the root folder. // https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize // Setting them to empty will make pylance think they're gone. messageParams["rootPath"] = ""; messageParams["rootUri"] = ""; // Need to rewrite the message now. _modifiedInitialize = true; return(Tuple.Create(MessageParser.Serialize(message), false)); } } } } catch { // Don't care if this happens. Just skip the message } } // Return the tuple that indicates if we need to keep listening or not // We need to keep listening if debugging or haven't modified initialize yet return(Tuple.Create(data, !_modifiedInitialize || _isDebugging)); }
public static IAgentMessage GetObjectFromXML(string message) { if (string.IsNullOrWhiteSpace(message)) { ConsoleWriter.Show("Read empty or whitespace message."); return(null); } var xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(message); } catch (Exception e) { ConsoleWriter.Error("Could not load message to XML. \nMessage content: \n" + message); return(new ErrorMessageAgent("ReadingMessage", "Error during proccessing XML, incorrect syntax\n Message read: " + message, "GetObjectFromXML", xmlDoc)); //xmlDoc as default for other actions } if (xmlDoc == null) { return(new ErrorMessageAgent("ReadingMessage", "Error during proccessing XML, incorrect syntax\n Message read: " + message, "GetObjectFromXML", xmlDoc)); //xmlDoc as default for other actions } switch (xmlDoc.DocumentElement.Name) { case nameof(RegisteredGames): var registeredGames = MessageParser.Deserialize <RegisteredGames>(message); return(new RegisteredGamesAgent(registeredGames.GameInfo?.Select(q => new GameArea.GameObjects.GameInfo(q.gameName, q.redTeamPlayers, q.blueTeamPlayers)).ToArray())); case nameof(ConfirmJoiningGame): var confirmJoin = MessageParser.Deserialize <ConfirmJoiningGame>(message); return(new ConfirmJoiningGameAgent(confirmJoin.gameId, new GameArea.GameObjects.Player(confirmJoin.PlayerDefinition.id, confirmJoin.PlayerDefinition.team, confirmJoin.PlayerDefinition.role), confirmJoin.privateGuid, confirmJoin.playerId)); case nameof(RejectJoiningGame): var rejectJoin = MessageParser.Deserialize <RejectJoiningGame>(message); return(new RejectJoiningGameAgent(rejectJoin.gameName, rejectJoin.playerId)); case nameof(Game): var game = MessageParser.Deserialize <Game>(message); GameArea.GameObjects.Player[] players; if (game.Players != null) { players = game.Players.Select(q => new GameArea.GameObjects.Player(q.id, q.team, q.role)).ToArray(); } else { players = null; } return(new GameAgent(game.playerId) { Board = new GameArea.GameObjects.GameBoard((int)game.Board.width, (int)game.Board.tasksHeight, (int)game.Board.goalsHeight), PlayerLocation = new GameArea.GameObjects.Location((int)game.PlayerLocation.x, (int)game.PlayerLocation.y), Players = players }); case nameof(Messages.GameMasterDisconnectedMessage): var gmDisconnected = MessageParser.Deserialize <Messages.GameMasterDisconnectedMessage>(message); return(new GameMasterDisconnectedMessageAgent(gmDisconnected.gameId)); case nameof(Data): var data = MessageParser.Deserialize <Data>(message); GameArea.GameObjects.GoalField[] goals; if (data.GoalFields != null) { goals = data.GoalFields.Select(q => new GameArea.GameObjects.GoalField((int)q.x, (int)q.y, DateTime.Now, q.team, q.type, q.playerIdSpecified ? new GameArea.GameObjects.Player(q.playerId) : null) { PlayerId = q.playerIdSpecified ? (long)q.playerId : -1 }).ToArray(); } else { goals = null; } GameArea.GameObjects.Piece[] pieces; if (data.Pieces != null) { pieces = data.Pieces.Select(q => new GameArea.GameObjects.Piece(q.id, q.timestamp, q.type, (q.playerIdSpecified ? (long)q.playerId : -1))).ToArray(); } else { pieces = null; } GameArea.GameObjects.TaskField[] tasks; if (data.TaskFields != null) { tasks = data.TaskFields.Select(q => new GameArea.GameObjects.TaskField((int)q.x, (int)q.y, DateTime.Now, q.distanceToPiece, (q.pieceIdSpecified ? new GameArea.GameObjects.Piece(q.pieceId, DateTime.Now) : null), (q.playerIdSpecified ? new GameArea.GameObjects.Player(q.playerId) : null)) { PlayerId = q.playerIdSpecified ? (long)q.playerId : -1 }).ToArray(); } else { tasks = null; } return(new DataAgent(data.playerId) { GameFinished = data.gameFinished, Goals = goals, Pieces = pieces, PlayerGUID = data.playerGuid, PlayerLocation = data.PlayerLocation != null ? new GameArea.GameObjects.Location((int)data.PlayerLocation.x, (int)data.PlayerLocation.y) : null, Tasks = tasks }); case nameof(Configuration.PlayerSettings): var settings = MessageParser.Deserialize <Configuration.PlayerSettings>(message); return(new PlayerSettingsAgent(settings)); case nameof(Messages.KnowledgeExchangeRequest): var exchangeRequest = MessageParser.Deserialize <Messages.KnowledgeExchangeRequest>(message); return(new KnowledgeExchangeRequestAgent(exchangeRequest.playerId, exchangeRequest.senderPlayerId)); case nameof(Messages.RejectKnowledgeExchange): var requestRejection = MessageParser.Deserialize <Messages.RejectKnowledgeExchange>(message); return(new RejectKnowledgeExchangeAgent(requestRejection.playerId, requestRejection.senderPlayerId, requestRejection.permanent, requestRejection.playerGuid)); default: return(new ErrorMessageAgent("ReadingMessage", "Warning during reading message to server object, type not recognised\n Message read: " + message, "GetObjectFromXML", xmlDoc)); //xmlDoc as default for other actions } }
public static IGMMessage GetObjectFromXML(string message) { if (string.IsNullOrWhiteSpace(message)) { ConsoleWriter.Show("Read empty or whitespace message."); return(null); } var xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(message); } catch (Exception e) { ConsoleWriter.Error("Could not load message to XML. \nMessage content: \n" + message); return(new ErrorMessageGM("ReadingMessage", "Warning during reading message to server object, type not recognised\n Message read: " + message, "GetObjectFromXML", xmlDoc)); } switch (xmlDoc.DocumentElement.Name) { case nameof(TestPiece): var test = MessageParser.Deserialize <TestPiece>(message); return(new TestPieceGM(test.playerGuid, test.gameId)); case nameof(DestroyPiece): var destroy = MessageParser.Deserialize <DestroyPiece>(message); return(new DestroyPieceGM(destroy.playerGuid, destroy.gameId)); case nameof(PlacePiece): var place = MessageParser.Deserialize <PlacePiece>(message); return(new PlacePieceGM(place.playerGuid, place.gameId)); case nameof(PickUpPiece): var pick = MessageParser.Deserialize <PickUpPiece>(message); return(new PickUpPieceGM(pick.playerGuid, pick.gameId)); case nameof(Move): var move = MessageParser.Deserialize <Move>(message); return(new MoveGM(move.playerGuid, move.gameId, (MoveType?)move.direction)); case nameof(Discover): var discover = MessageParser.Deserialize <Discover>(message); return(new DiscoverGM(discover.playerGuid, discover.gameId)); case nameof(RejectGameRegistration): var reject = MessageParser.Deserialize <RejectGameRegistration>(message); return(new RejectGameRegistrationGM(reject.gameName)); case nameof(ConfirmGameRegistration): var confirm = MessageParser.Deserialize <ConfirmGameRegistration>(message); return(new ConfirmGameRegistrationGM(confirm.gameId)); case nameof(JoinGame): var join = MessageParser.Deserialize <JoinGame>(message); return(new JoinGameGM(join.gameName, join.preferredTeam, join.preferredRole, (long)join.playerId)); case nameof(PlayerDisconnected): var playerDisconnected = MessageParser.Deserialize <PlayerDisconnected>(message); return(new PlayerDisconnectedGM(playerDisconnected.playerId)); case nameof(Configuration.GameMasterSettings): var settings = MessageParser.Deserialize <Configuration.GameMasterSettings>(message); return(new GameMasterSettingsGM(settings)); case nameof(AuthorizeKnowledgeExchange): var authMsg = MessageParser.Deserialize <AuthorizeKnowledgeExchange>(message); return(new AuthorizeKnowledgeExchangeGM(authMsg.playerGuid, authMsg.gameId, authMsg.withPlayerId)); case nameof(RejectKnowledgeExchange): var rejectExchange = MessageParser.Deserialize <RejectKnowledgeExchange>(message); return(new RejectKnowledgeExchangeGM(rejectExchange.playerId, rejectExchange.senderPlayerId, rejectExchange.permanent, rejectExchange.playerGuid)); case nameof(AcceptExchangeRequest): var acceptMsg = MessageParser.Deserialize <AcceptExchangeRequest>(message); return(new AcceptExchangeRequestGM(acceptMsg.playerId, acceptMsg.senderPlayerId)); // zalatwic roznice typow TaskField i GoalField nizej - najlepiej konstruktory biorace obiekt z namespace Messages case nameof(SuggestAction): var suggestMsg = MessageParser.Deserialize <SuggestAction>(message); List <GameArea.GameObjects.TaskField> tasks = new List <GameArea.GameObjects.TaskField>(); List <GameArea.GameObjects.GoalField> goals = new List <GameArea.GameObjects.GoalField>(); foreach (var t in suggestMsg.TaskFields) { tasks.Add(new GameArea.GameObjects.TaskField(t)); } foreach (var g in suggestMsg.GoalFields) { goals.Add(new GameArea.GameObjects.GoalField(g)); } return(new SuggestActionGM(suggestMsg.playerId, suggestMsg.senderPlayerId, suggestMsg.playerGuid, suggestMsg.gameId, tasks.ToArray(), goals.ToArray())); //case nameof(SuggestActionResponse): // var answer = MessageParser.Deserialize<SuggestActionResponse>(message); // List<GameArea.GameObjects.TaskField> task = new List<GameArea.GameObjects.TaskField>(); // List<GameArea.GameObjects.GoalField> goal = new List<GameArea.GameObjects.GoalField>(); // foreach (var t in answer.TaskFields) // task.Add(new GameArea.GameObjects.TaskField(t)); // foreach (var g in answer.GoalFields) // goal.Add(new GameArea.GameObjects.GoalField(g)); // return new SuggestActionResponseGM(answer.playerId, answer.senderPlayerId, answer.playerGuid, answer.gameId, task.ToArray(), goal.ToArray()); case nameof(Data): var data = MessageParser.Deserialize <Data>(message); return(new DataGM(data)); default: return(new ErrorMessageGM("ReadingMessage", "Warning during reading message to server object, type not recognised\n Message read: " + message, "GetObjectFromXML", xmlDoc)); //xmlDoc as default for other actions } }
public void Log(string message) { if (string.IsNullOrWhiteSpace(message)) { ConsoleWriter.Show("Read empty or whitespace message."); return; } var xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(message); } catch (Exception e) { ConsoleWriter.Error("Could not load message to XML. \nMessage content: \n" + message); return; } if (xmlDoc == null) { ConsoleWriter.Error("Could not load message to XML. \nMessage content: \n" + message); } var gameId = gameMaster.GameId; string playerGuid; ulong playerId; Player.Player player = null; string nameMessage = xmlDoc.DocumentElement.Name; switch (nameMessage) { case nameof(TestPiece): var test = MessageParser.Deserialize <TestPiece>(message); playerGuid = test.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(DestroyPiece): var destroy = MessageParser.Deserialize <DestroyPiece>(message); playerGuid = destroy.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(PlacePiece): var place = MessageParser.Deserialize <PlacePiece>(message); playerGuid = place.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(PickUpPiece): var pick = MessageParser.Deserialize <PickUpPiece>(message); playerGuid = pick.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(Move): var move = MessageParser.Deserialize <Move>(message); playerGuid = move.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(Discover): var discover = MessageParser.Deserialize <Discover>(message); playerGuid = discover.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(RejectGameRegistration): var reject = MessageParser.Deserialize <RejectGameRegistration>(message); break; case nameof(ConfirmGameRegistration): var confirm = MessageParser.Deserialize <ConfirmGameRegistration>(message); break; case nameof(JoinGame): var join = MessageParser.Deserialize <JoinGame>(message); playerId = join.playerId; player = gameMaster.GetPlayerById(playerId); break; case nameof(PlayerDisconnected): var playerDisconnected = MessageParser.Deserialize <PlayerDisconnected>(message); playerId = playerDisconnected.playerId; player = gameMaster.GetPlayerById(playerId); break; case nameof(Configuration.GameMasterSettings): var settings = MessageParser.Deserialize <Configuration.GameMasterSettings>(message); break; case nameof(AuthorizeKnowledgeExchange): var authMsg = MessageParser.Deserialize <AuthorizeKnowledgeExchange>(message); playerGuid = authMsg.playerGuid; break; case nameof(RejectKnowledgeExchange): var rejectExchange = MessageParser.Deserialize <RejectKnowledgeExchange>(message); playerGuid = rejectExchange.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; case nameof(AcceptExchangeRequest): var acceptMsg = MessageParser.Deserialize <AcceptExchangeRequest>(message); playerId = acceptMsg.playerId; player = gameMaster.GetPlayerById(playerId); break; // zalatwic roznice typow TaskField i GoalField nizej - najlepiej konstruktory biorace obiekt z namespace Messages //case nameof(SuggestAction): // var suggestMsg = MessageParser.Deserialize<SuggestAction>(message); // return new SuggestActionGM(suggestMsg.playerId, suggestMsg.senderPlayerId, suggestMsg.playerGuid, suggestMsg.gameId, suggestMsg.TaskFields, suggestMsg.GoalFields); //case nameof(SuggestActionResponse): // var answer = MessageParser.Deserialize<SuggestActionResponse>(message); // return new SuggestActionResponseGM(answer.playerId, answer.senderPlayerId, answer.playerGuid, answer.TaskFields, answer.GoalFields); case nameof(Data): var data = MessageParser.Deserialize <Data>(message); playerGuid = data.playerGuid; player = gameMaster.GetPlayerByGuid(playerGuid); break; default: ConsoleWriter.Error("Could not load message to XML. \nMessage content: \n" + message); break; } //mainLogger.Log(decision, description); StreamWriter sw = new StreamWriter(nameGameMasterLogger, true); var dt = DateTime.Now; String timestamp = String.Format("{0:yyyy-MM-dd}" + "T" + "{1:HH:mm:ss.fff}", dt, dt); string stringPlayerId = ""; string stringPlayerGuid = ""; string stringColourPlayer = ""; string stringRole = ""; if (player != null) { stringPlayerId = player.ID.ToString(); stringPlayerGuid = player.GUID.ToString(); stringColourPlayer = player.Team.ToString(); stringRole = player.Role.ToString(); } sw.WriteLine($"{nameMessage},{timestamp},{gameId},{stringPlayerId},{stringPlayerGuid},{stringColourPlayer},{stringRole}"); sw.Close(); }