private void OnMessageReceived(MessageReader message)
        {
            var flag = message.Tag;

            Logger.Verbose("Server got {0}.", flag);

            switch (flag)
            {
            case MessageFlags.HostGame:
            {
                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    Message13Redirect.Serialize(packet, false, _nodeProvider.Get());
                    _connection.Send(packet);
                }
                break;
            }

            case MessageFlags.JoinGame:
            {
                Message01JoinGame.Deserialize(message,
                                              out var gameCode,
                                              out var unknown);

                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    var endpoint = _nodeLocator.Find(GameCode.IntToGameName(gameCode));
                    if (endpoint == null)
                    {
                        Message01JoinGame.SerializeError(packet, false, DisconnectReason.GameMissing);
                    }
                    else
                    {
                        Message13Redirect.Serialize(packet, false, endpoint);
                    }

                    _connection.Send(packet);
                }
                break;
            }

            case MessageFlags.GetGameListV2:
            {
                // TODO: Implement.
                using (var packet = MessageWriter.Get(SendOption.Reliable))
                {
                    Message01JoinGame.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented);
                    _connection.Send(packet);
                }
                break;
            }

            default:
            {
                Logger.Warning("Received unsupported message flag on the redirector ({0}).", flag);
                break;
            }
            }
        }
Ejemplo n.º 2
0
        public override async ValueTask HandleMessageAsync(IMessageReader reader, MessageType messageType)
        {
            var flag = reader.Tag;

            Logger.Verbose("Server got {0}.", flag);

            switch (flag)
            {
            case MessageFlags.HostGame:
            {
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message13RedirectS2C.Serialize(packet, false, _nodeProvider.Get());
                await Connection.SendAsync(packet);

                break;
            }

            case MessageFlags.JoinGame:
            {
                Message01JoinGameC2S.Deserialize(
                    reader,
                    out var gameCode,
                    out _);

                using var packet = MessageWriter.Get(MessageType.Reliable);
                var endpoint = await _nodeLocator.FindAsync(GameCodeParser.IntToGameName(gameCode));

                if (endpoint == null)
                {
                    Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.GameMissing);
                }
                else
                {
                    Message13RedirectS2C.Serialize(packet, false, endpoint);
                }

                await Connection.SendAsync(packet);

                break;
            }

            case MessageFlags.GetGameListV2:
            {
                // TODO: Implement.
                using var packet = MessageWriter.Get(MessageType.Reliable);
                Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented);
                await Connection.SendAsync(packet);

                break;
            }

            default:
            {
                Logger.Warning("Received unsupported message flag on the redirector ({0}).", flag);
                break;
            }
            }
        }