public void CodeV1() { const string code = "ABCD"; const int codeInt = 0x44434241; Assert.Equal(code, GameCodeParser.IntToGameName(codeInt)); Assert.Equal(codeInt, GameCodeParser.GameNameToInt(code)); }
public void CodeV2() { const string code = "ABCDEF"; const int codeInt = -1943683525; Assert.Equal(code, GameCodeParser.IntToGameName(codeInt)); Assert.Equal(codeInt, GameCodeParser.GameNameToInt(code)); }
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; } } }
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)); }
public GameCode(int value) { Value = value; Code = GameCodeParser.IntToGameName(value); }
public static GameCode Create() { return(new GameCode(GameCodeParser.GenerateCode(6))); }
public GameCode(string code) { Value = GameCodeParser.GameNameToInt(code); Code = code.ToUpperInvariant(); }
public GameCode(string code) { Value = GameCodeParser.GameNameToInt(code); Code = code; }