public Server(Configuration configuration, GameCore game, bool openOnInit = true, ILogger logger = null) { if (configuration.Port == 0) { configuration.Port = 33132; } MessageProcessor = new ServerNetworkProcessor(this); MessageProcessor.OnMessageSentOrDiscarded += (a, b) => MessagePool.Release(b); GameInstance = new NetworkedGame(FullGameState.Create(game), logger, game.Settings); HookEvents(); SetGame(game); Logger = logger != null ? (ILogger) new ModuleLogger(logger, "Server") : new NullLogger(); Login = new LoginManager(this); Connections = new ConnectionManager(this); Configuration = new InitializedConfiguration(configuration); Timers = new Engine.Core.Timing.Timer.Factory(); ChatHandler = new Chat.ChatServer(this); Logger.Info($"Server Created."); if (openOnInit) { Open(); } }
public void Can_serialize_and_deserialize_entities() { var componentManager = new ComponentManager(); var entityManager = new EntityManager(componentManager); var entityFactory = new EntityFactory(); var serializer = new Serializer(); entityFactory.CreatePlayer(entityManager.Create(), new Vector2(200, 400), 1, PlayerIndex.One, default); entityFactory.CreatePlayer(entityManager.Create(), new Vector2(300, 400), 2, PlayerIndex.Two, default); var state = FullGameState.CreateFullGameState(componentManager, entityManager.Entities, 1, DateTime.UtcNow, DateTime.UtcNow.AddSeconds(1), 1); var writer = new NetDataWriter(); writer.Put(serializer.Serialize(state)); var bytes = writer.CopyData(); var reader = new NetDataReader(bytes); var target = serializer.Deserialize <FullGameState>(reader.GetRemainingBytes()); target.Components.Should() .BeEquivalentTo(state.Components, o => o .Excluding(c => c.Path.EndsWith(nameof(CollisionBody.OldPosition)) || c.Path.EndsWith(nameof(PlayerState.LocalPlayerIndex)) || c.Path.EndsWith(nameof(PlayerState.IsLocal)) ) ); }
public NetworkedGame(FullGameState fullState, ILogger gameLogger = null, EngineSettings settings = null) { if (fullState != null) { Game = fullState.CreateGameFromState(gameLogger, settings); } else { Game = new GameCore(gameLogger, new NullGamemode(), new ModAssetInfo()); } Game.Authoritative = false; }
private void SendWorldData(NetPeer peer) { var utcNow = DateTime.UtcNow; var resumeIn = TimeSpan.FromSeconds(1); var resumeAtUtc = utcNow.Add(resumeIn); sharedContext.ResumeAtGameTime = gameTime.TotalGameTime + resumeIn; Console.WriteLine("Sending initial world data"); var state = FullGameState.CreateFullGameState(componentMapperService, ActiveEntities, sharedContext.FrameCounter, utcNow, resumeAtUtc, peer.Id); var bytes = serializer.Serialize(state); var writer = new NetDataWriter(); writer.Put(NetMessageType.FullGameState, bytes); peer.Send(writer, DeliveryMethod.ReliableOrdered); statusByPeer[peer] = PeerStatus.WorldDataSent; }
public void SetGame(GameCore game) { GameStartRemainingTimeout = ServerSettings.Instance.TimeToWaitForPlayersReady; _disablePropertyNotifications = true; foreach (var player in Players) { player.Player.Tank = null; player.Player.IsSpectator = false; //Clear existing attributes from the player object player.Player.SelectedTankReflectionName = null; player.Player.SpawnPoint = Vector2.Zero; player.Player.Team = null; player.Player.AllowedTankTypes = null; player.Player.IsReady = false; game.AddPlayer(player.Player); } _disablePropertyNotifications = false; GameInstance.FullGameState = FullGameState.Create(game); Game.Authoritative = true; }
protected override void DeserializeInternal(NetIncomingMessage message) { State = FullGameState.Read(message); EngineSettings = new Engine.Settings.EngineSettings(); EngineSettings.Load(message.ReadString()); }
public FullGameStateSentAction(GameCore game) { State = FullGameState.Create(game); EngineSettings = game.Settings; }