示例#1
0
        /// <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;
            }
            }
        }