private void Log(Messages.GameMaster.IGameMasterHandler message) { Xsd2.GameMessage msg = message as Xsd2.GameMessage; if (msg != null && _logger != null) { var player = GameState.BluePlayers.FirstOrDefault(p => p.Guid.ToString() == msg.playerGuid); if (player == null) { player = GameState.RedPlayers.FirstOrDefault(p => p.Guid.ToString() == msg.playerGuid); } _logger.WriteLog(message.GetType().ToString(), GameState.GameId.ToString(), player.Id.ToString(), player.Guid.ToString(), player.TeamColour.ToString(), player.PlayerType.ToString()); if (GameState.GameFinished) { string result = ""; result = player.TeamColour == Xsd2.TeamColour.blue ? "Victory" : "Defeat"; foreach (var p in GameState.BluePlayers) { _logger.WriteLog(result, GameState.GameId.ToString(), p.Id.ToString(), p.Guid.ToString(), p.TeamColour.ToString(), p.PlayerType.ToString()); } result = result == "Victory" ? "Defeat" : "Victory"; foreach (var p in GameState.RedPlayers) { _logger.WriteLog(result, GameState.GameId.ToString(), p.Id.ToString(), p.Guid.ToString(), p.TeamColour.ToString(), p.PlayerType.ToString()); } } } if (GameState.GameFinished && _logger != null) { _logger.Dispose(); _logger = null; } }
private void Receive() { while (_status) { try { if (_tcpClient.Available > 0 || !String.IsNullOrEmpty(_msg)) { byte[] arr = new byte[2048]; if (_tcpClient.Available > 0) { _tcpClient.GetStream().Read(arr, 0, arr.Length); _msg += Encoding.UTF8.GetString(arr); } _msg = _msg.Replace("\0", string.Empty); if (Messages.KeepAlive.IsKeepAlive(_msg)) { _msg = _msg.Substring(1); ResetTimer(); } else { int specialByteIndex; string currentMsg = _msgParser.Parse(ref _msg, out specialByteIndex); if (specialByteIndex == -1 || string.IsNullOrEmpty(currentMsg)) { continue; } ResetTimer(); Console.WriteLine(currentMsg); var type = _xmlRootReader.GetMessageType(currentMsg); //Deserialization of the message var serializer = new XmlSerializer(type); Messages.GameMaster.IGameMasterHandler message = null; using (var stream = new StringReader(currentMsg)) { message = (IGameMasterHandler)serializer.Deserialize(stream); } message.HandleOnGameMaster(this); Log(message); } } } catch (Exception e) { Console.WriteLine("Lost connection: " + e); _status = false; //Disconnect(); } Thread.Sleep(30); } }