Example #1
0
        public void CodeV1()
        {
            const string code    = "ABCD";
            const int    codeInt = 0x44434241;

            Assert.Equal(code, GameCodeParser.IntToGameName(codeInt));
            Assert.Equal(codeInt, GameCodeParser.GameNameToInt(code));
        }
Example #2
0
        public void CodeV2()
        {
            const string code    = "ABCDEF";
            const int    codeInt = -1943683525;

            Assert.Equal(code, GameCodeParser.IntToGameName(codeInt));
            Assert.Equal(codeInt, GameCodeParser.GameNameToInt(code));
        }
Example #3
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;
            }
            }
        }
Example #4
0
        public async ValueTask RemoveAsync(GameCode gameCode)
        {
            if (_games.TryGetValue(gameCode, out var game) && game.PlayerCount > 0)
            {
                foreach (var player in game.Players)
                {
                    await player.KickAsync();
                }

                return;
            }

            if (!_games.TryRemove(gameCode, out game))
            {
                return;
            }

            _logger.LogDebug("Remove game with code {0} ({1}).", GameCodeParser.IntToGameName(gameCode), gameCode);
            await _nodeLocator.RemoveAsync(GameCodeParser.IntToGameName(gameCode));

            await _eventManager.CallAsync(new GameDestroyedEvent(game));
        }
Example #5
0
 public GameCode(int value)
 {
     Value = value;
     Code  = GameCodeParser.IntToGameName(value);
 }
Example #6
0
 public static GameCode Create()
 {
     return(new GameCode(GameCodeParser.GenerateCode(6)));
 }
Example #7
0
 public GameCode(string code)
 {
     Value = GameCodeParser.GameNameToInt(code);
     Code  = code.ToUpperInvariant();
 }
Example #8
0
 public GameCode(string code)
 {
     Value = GameCodeParser.GameNameToInt(code);
     Code  = code;
 }