var readerCopy = reader.Slice(reader.Position);
// TODO: Return value, either a bool (to cancel) or a writer (to cancel (null) or modify/overwrite).
- // await Player.Game.HandleGameData(readerCopy, Player, toPlayer);
+ await Player.Game.HandleGameDataAsync(readerCopy, Player, toPlayer);
// Broadcast packet to all other players.
using (var writer = MessageWriter.Get(messageType))
using System;
using System.Collections.Generic;
+using System.Threading;
using System.Threading.Tasks;
using Impostor.Api.Innersloth.GameData;
using Impostor.Api.Net.Messages;
using Impostor.Server.GameData;
using Impostor.Server.GameData.Objects;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
namespace Impostor.Server.Net.State
{
private readonly List<InnerNetObject> _allObjects = new List<InnerNetObject>();
private readonly Dictionary<uint, InnerNetObject> _allObjectsFast = new Dictionary<uint, InnerNetObject>();
- public async ValueTask HandleGameData(IMessageReader parent, ClientPlayer sender, bool toPlayer)
+ private int _gamedataInitialized;
+
+ public void InitGameData()
+ {
+ if (Interlocked.Exchange(ref _gamedataInitialized, 1) != 0)
+ {
+ return;
+ }
+
+
+ }
+
+ public async ValueTask HandleGameDataAsync(IMessageReader parent, ClientPlayer sender, bool toPlayer)
{
// Find target player.
ClientPlayer target = null;
{
case GameDataTag.DataFlag:
{
- if (_allObjectsFast.TryGetValue(reader.ReadPackedUInt32(), out var obj))
+ var netId = reader.ReadPackedUInt32();
+ if (_allObjectsFast.TryGetValue(netId, out var obj))
{
obj.Deserialize(reader, false);
}
+ else
+ {
+ _logger.LogWarning("Received DataFlag for unregistered NetId {0}.", netId);
+ }
break;
}
if (componentsCount != components.Count)
{
- Logger.Error(
+ _logger.LogError(
"Children didn't match for spawnable {0}, name {1} ({2} != {3})",
objectId,
innerNetObject.GetType().Name,
if (!AddNetObject(obj))
{
- Logger.Verbose("Failed to AddNetObject.");
+ _logger.LogTrace("Failed to AddNetObject.");
obj.NetId = uint.MaxValue;
break;
{
if (TryGetPlayer(id, out var clientById))
{
- Logger.Verbose("Spawn character");
+ _logger.LogTrace("Spawn character");
}
else
{
- Logger.Verbose("Spawn unowned character");
+ _logger.LogTrace("Spawn unowned character");
}
}
continue;
}
- Logger.Error("Couldn't find spawnable object {0}.", objectId);
+ _logger.LogError("Couldn't find spawnable object {0}.", objectId);
break;
}
case GameDataTag.DespawnFlag:
{
var objectNetId = reader.ReadPackedUInt32();
- Logger.Verbose("> Destroy {0}", objectNetId);
+ _logger.LogTrace("> Destroy {0}", objectNetId);
break;
}
{
var clientId = reader.ReadPackedInt32();
var targetScene = reader.ReadString();
- Logger.Verbose("> Scene {0} to {1}", clientId, targetScene);
+ _logger.LogTrace("> Scene {0} to {1}", clientId, targetScene);
break;
}
case GameDataTag.ReadyFlag:
{
var clientId = reader.ReadPackedInt32();
- Logger.Verbose("> IsReady {0}", clientId);
+ _logger.LogTrace("> IsReady {0}", clientId);
break;
}
default:
{
- Logger.Debug("Bad GameData tag {0}", reader.Tag);
+ _logger.LogTrace("Bad GameData tag {0}", reader.Tag);
break;
}
}
using Impostor.Api.Net;
using Impostor.Api.Net.Messages;
using Impostor.Hazel;
+using Microsoft.Extensions.Logging;
namespace Impostor.Server.Net.State
{
public async ValueTask HandleKickPlayer(int playerId, bool isBan)
{
- Logger.Information("{0} - Player {1} has left.", Code, playerId);
+ _logger.LogInformation("{0} - Player {1} has left.", Code, playerId);
using var message = MessageWriter.Get(MessageType.Reliable);
private async ValueTask HandleJoinGameNew(ClientPlayer sender, bool isNew)
{
- Logger.Information("{0} - Player {1} ({2}) is joining.", Code, sender.Client.Name, sender.Client.Id);
+ _logger.LogInformation("{0} - Player {1} ({2}) is joining.", Code, sender.Client.Name, sender.Client.Id);
// Add player to the game.
if (isNew)
private async ValueTask HandleJoinGameNext(ClientPlayer sender, bool isNew)
{
- Logger.Information("{0} - Player {1} ({2}) is rejoining.", Code, sender.Client.Name, sender.Client.Id);
+ _logger.LogInformation("{0} - Player {1} ({2}) is rejoining.", Code, sender.Client.Name, sender.Client.Id);
// Add player to the game.
if (isNew)
using Impostor.Api.Net;
using Impostor.Api.Net.Messages;
using Impostor.Hazel;
+using Microsoft.Extensions.Logging;
namespace Impostor.Server.Net.State
{
return false;
}
- Logger.Information("{0} - Player {1} ({2}) has left.", Code, player.Client.Name, playerId);
+ _logger.LogInformation("{0} - Player {1} ({2}) has left.", Code, player.Client.Name, playerId);
player.Client.Player = null;
}
HostId = host.Client.Id;
- Logger.Information("{0} - Assigned {1} ({2}) as new host.", Code, host.Client.Name, host.Client.Id);
+ _logger.LogInformation("{0} - Assigned {1} ({2}) as new host.", Code, host.Client.Name, host.Client.Id);
// Check our current game state.
if (GameState == GameStates.Ended && host.Limbo == LimboStates.WaitingForHost)
using Impostor.Server.Net.Hazel;
using Impostor.Server.Net.Manager;
using Impostor.Server.Net.Redirector;
+using Microsoft.Extensions.Logging;
using Serilog;
using ILogger = Serilog.ILogger;
{
internal partial class Game : IGame
{
- private static readonly ILogger Logger = Log.ForContext<Game>();
-
+ private readonly ILogger<Game> _logger;
private readonly IServiceProvider _serviceProvider;
private readonly GameManager _gameManager;
private readonly ClientManager _clientManager;
private readonly IEventManager _eventManager;
public Game(
+ ILogger<Game> logger,
IServiceProvider serviceProvider,
GameManager gameManager,
IPEndPoint publicIp,
ClientManager clientManager,
IEventManager eventManager)
{
+ _logger = logger;
_serviceProvider = serviceProvider;
_gameManager = gameManager;
_players = new ConcurrentDictionary<int, ClientPlayer>();
private static async Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
- .MinimumLevel.Information()
+ .MinimumLevel.Verbose()
.WriteTo.Console()
.CreateLogger();