mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 01:46:11 +00:00
Parse GameData headers
This commit is contained in:
1 parent
33519a1ead
commit
8392fe4237
5 files changed
+102
-3
No files matched your search
@@ -57,5 +57,7 @@ namespace Impostor.Server.Games
|
||||
ValueTask HandleRemovePlayer(int playerId, DisconnectReason reason);
|
||||
|
||||
ValueTask HandleAlterGame(IMessageReader message, IClientPlayer sender, bool isPublic);
|
||||
|
||||
ValueTask HandleGameData(IMessageReader parent, IClientPlayer sender, bool toPlayer);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
using Hazel;
|
||||
using Impostor.Server.Data;
|
||||
@@ -144,10 +145,16 @@ namespace Impostor.Server.Net
|
||||
return;
|
||||
}
|
||||
|
||||
var toPlayer = flag == MessageFlags.GameDataTo;
|
||||
|
||||
// Handle packet.
|
||||
var readerCopy = reader.Slice(reader.Position);
|
||||
await Player.Game.HandleGameData(readerCopy, Player, toPlayer);
|
||||
|
||||
// Broadcast packet to all other players.
|
||||
using var writer = Player.Game.CreateMessage(message.Type);
|
||||
|
||||
if (flag == MessageFlags.GameDataTo)
|
||||
if (toPlayer)
|
||||
{
|
||||
var target = reader.ReadPackedInt32();
|
||||
reader.CopyTo(writer);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Impostor.Server.Games;
|
||||
using Impostor.Server.Net.Messages;
|
||||
using Impostor.Shared.Innersloth.Data;
|
||||
using Impostor.Shared.Innersloth.GameData;
|
||||
|
||||
namespace Impostor.Server.Net.State
|
||||
{
|
||||
@@ -193,5 +195,80 @@ namespace Impostor.Server.Net.State
|
||||
|
||||
await BroadcastJoinMessage(packet, true, sender);
|
||||
}
|
||||
|
||||
public async ValueTask HandleGameData(IMessageReader parent, IClientPlayer sender, bool toPlayer)
|
||||
{
|
||||
// Find target player.
|
||||
IClientPlayer target = null;
|
||||
|
||||
if (toPlayer)
|
||||
{
|
||||
var targetId = parent.ReadPackedInt32();
|
||||
if (!TryGetPlayer(targetId, out target))
|
||||
{
|
||||
// Invalid target.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Parse GameData messages.
|
||||
while (parent.Position < parent.Length)
|
||||
{
|
||||
var reader = parent.ReadMessage();
|
||||
|
||||
switch (reader.Tag)
|
||||
{
|
||||
case GameDataTag.DataFlag:
|
||||
{
|
||||
var objectNetId = reader.ReadPackedUInt32();
|
||||
Logger.Verbose("> Update {0}", objectNetId);
|
||||
break;
|
||||
}
|
||||
|
||||
case GameDataTag.RpcFlag:
|
||||
{
|
||||
var objectNetId = reader.ReadPackedUInt32();
|
||||
var callId = reader.ReadByte();
|
||||
Logger.Verbose("> RPC {0} {1}", objectNetId, callId);
|
||||
break;
|
||||
}
|
||||
|
||||
case GameDataTag.SpawnFlag:
|
||||
{
|
||||
var objectId = reader.ReadPackedUInt32();
|
||||
Logger.Verbose("> Spawn {0}", objectId);
|
||||
break;
|
||||
}
|
||||
|
||||
case GameDataTag.DespawnFlag:
|
||||
{
|
||||
var objectNetId = reader.ReadPackedUInt32();
|
||||
Logger.Verbose("> Destroy {0}", objectNetId);
|
||||
break;
|
||||
}
|
||||
|
||||
case GameDataTag.SceneChangeFlag:
|
||||
{
|
||||
var clientId = reader.ReadPackedInt32();
|
||||
var targetScene = reader.ReadString();
|
||||
Logger.Verbose("> Scene {0} to {1}", clientId, targetScene);
|
||||
break;
|
||||
}
|
||||
|
||||
case GameDataTag.ReadyFlag:
|
||||
{
|
||||
var clientId = reader.ReadPackedInt32();
|
||||
Logger.Verbose("> IsReady {0}", clientId);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
Logger.Debug("Bad GameData tag {0}", reader.Tag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Impostor.Shared.Innersloth.GameData
|
||||
{
|
||||
public static class GameDataTag
|
||||
{
|
||||
public const byte DataFlag = 1;
|
||||
public const byte RpcFlag = 2;
|
||||
public const byte SpawnFlag = 4;
|
||||
public const byte DespawnFlag = 5;
|
||||
public const byte SceneChangeFlag = 6;
|
||||
public const byte ReadyFlag = 7;
|
||||
public const byte ChangeSettingsFlag = 8;
|
||||
}
|
||||
}
|
||||
Submodule submodules/Hazel-Networking updated: f00245df45...ebc3b36068.
Reference in new issue
Block a user