/// <summary> /// Handles a data message (The bulk of all messages received, containing player movements, block places, etc) /// </summary> private void HandleDataMessage(NetIncomingMessage im) { if (im == null) { throw new ArgumentNullException(nameof(im)); } var type = (MessageTypes)im.ReadByte(); switch (type) { case MessageTypes.Init: { var msg = new InitMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.InitReceived.Invoke( new EventManager.NetEvents.GameServerEvents.InitEventArgs(msg)); break; } case MessageTypes.Banner: { var msg = new BannerMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.LobbyBannerReceived.Invoke( new EventManager.NetEvents.GameServerEvents.BannerEventArgs(msg.Banner)); break; } case MessageTypes.LevelData: { var msg = new LevelDataMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.LevelDataReceived.Invoke( new EventManager.NetEvents.GameServerEvents.LevelDataEventArgs(new Level(msg.Level, networkManager.Client))); break; } case MessageTypes.Chat: { var msg = new ChatMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.ChatReceived.Invoke( new EventManager.NetEvents.GameServerEvents.ChatEventArgs(msg.Message)); break; } case MessageTypes.PlayerJoin: { var msg = new PlayerJoinMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.PlayerJoinReceived.Invoke( new EventManager.NetEvents.GameServerEvents.PlayerJoinEventArgs(msg.Player)); break; } case MessageTypes.PingUpdate: { var msg = new PingUpdateMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.PingUpdateReceived.Invoke( new EventManager.NetEvents.GameServerEvents.PingUpdateEventArgs(msg.Pings)); break; } case MessageTypes.BlockPlace: { if (networkManager.Client.Level != null) { var msg = new BlockPlaceMessage(im, MessageContext.Client); networkManager.Client.Events.Network.Game.BlockPlaceMessageReceived.Invoke( new EventManager.NetEvents.GameServerEvents.BlockPlacedEventArgs(networkManager.Client.Level, msg.Point.X, msg.Point.Y, msg.Layer, msg.Type)); } break; } } }