mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-12-11 20:15:10 +01:00
use hash for addon messages too (save space)
This commit is contained in:
parent
4e8f1ade73
commit
eaa2f4578a
@ -1,27 +1,28 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using OWML.Common;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
|
||||||
namespace QSB.API;
|
namespace QSB.API;
|
||||||
|
|
||||||
public static class AddonDataManager
|
public static class AddonDataManager
|
||||||
{
|
{
|
||||||
private static readonly Dictionary<string, Action<uint, object>> _handlers = new();
|
private static readonly Dictionary<int, Action<uint, object>> _handlers = new();
|
||||||
|
|
||||||
public static void OnReceiveDataMessage(string messageType, object data, uint from)
|
public static void OnReceiveDataMessage(int hash, object data, uint from)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Received data message of message type \"{messageType}\" from {from}!");
|
DebugLog.DebugWrite($"Received addon message of with hash {hash} from {from}!");
|
||||||
if (!_handlers.TryGetValue(messageType, out var handler))
|
if (!_handlers.TryGetValue(hash, out var handler))
|
||||||
{
|
{
|
||||||
|
DebugLog.DebugWrite($"unknown addon message type with hash {hash}", MessageType.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
handler(from, data);
|
handler(from, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RegisterHandler<T>(string messageType, Action<uint, T> handler)
|
public static void RegisterHandler<T>(int hash, Action<uint, T> handler)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Registering handler for \"{messageType}\" with type of {typeof(T).Name}");
|
DebugLog.DebugWrite($"Registering addon message handler for hash {hash} with type {typeof(T).Name}");
|
||||||
_handlers.Add(messageType, (from, data) => handler(from, (T)data));
|
_handlers.Add(hash, (from, data) => handler(from, (T)data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,9 @@ using QSB.Utility;
|
|||||||
|
|
||||||
namespace QSB.API.Messages;
|
namespace QSB.API.Messages;
|
||||||
|
|
||||||
public class AddonDataMessage : QSBMessage<(string messageType, byte[] data, bool receiveLocally)>
|
public class AddonDataMessage : QSBMessage<(int hash, byte[] data, bool receiveLocally)>
|
||||||
{
|
{
|
||||||
public AddonDataMessage(string messageType, object data, bool receiveLocally) : base((messageType, data.ToBytes(), receiveLocally)) { }
|
public AddonDataMessage(int hash, object data, bool receiveLocally) : base((hash, data.ToBytes(), receiveLocally)) { }
|
||||||
|
|
||||||
public override void OnReceiveLocal()
|
public override void OnReceiveLocal()
|
||||||
{
|
{
|
||||||
@ -18,6 +18,6 @@ public class AddonDataMessage : QSBMessage<(string messageType, byte[] data, boo
|
|||||||
public override void OnReceiveRemote()
|
public override void OnReceiveRemote()
|
||||||
{
|
{
|
||||||
var obj = Data.data.ToObject();
|
var obj = Data.data.ToObject();
|
||||||
AddonDataManager.OnReceiveDataMessage(Data.messageType, obj, From);
|
AddonDataManager.OnReceiveDataMessage(Data.hash, obj, From);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using OWML.Common;
|
using Mirror;
|
||||||
|
using OWML.Common;
|
||||||
using QSB.API.Messages;
|
using QSB.API.Messages;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
@ -30,10 +31,10 @@ public class QSBAPI : IQSBAPI
|
|||||||
public T GetCustomData<T>(uint playerId, string key) => QSBPlayerManager.GetPlayer(playerId).GetCustomData<T>(key);
|
public T GetCustomData<T>(uint playerId, string key) => QSBPlayerManager.GetPlayer(playerId).GetCustomData<T>(key);
|
||||||
|
|
||||||
public void SendMessage<T>(string messageType, T data, uint to = uint.MaxValue, bool receiveLocally = false)
|
public void SendMessage<T>(string messageType, T data, uint to = uint.MaxValue, bool receiveLocally = false)
|
||||||
=> new AddonDataMessage(messageType, data, receiveLocally) { To = to }.Send();
|
=> new AddonDataMessage(messageType.GetStableHashCode(), data, receiveLocally) { To = to }.Send();
|
||||||
|
|
||||||
public void RegisterHandler<T>(string messageType, Action<uint, T> handler)
|
public void RegisterHandler<T>(string messageType, Action<uint, T> handler)
|
||||||
=> AddonDataManager.RegisterHandler(messageType, handler);
|
=> AddonDataManager.RegisterHandler(messageType.GetStableHashCode(), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class QSBAPIEvents
|
internal static class QSBAPIEvents
|
||||||
|
|||||||
@ -19,14 +19,14 @@ public static class QSBMessageManager
|
|||||||
{
|
{
|
||||||
#region inner workings
|
#region inner workings
|
||||||
|
|
||||||
internal static readonly Dictionary<ushort, Type> _types = new();
|
internal static readonly Dictionary<int, Type> _types = new();
|
||||||
|
|
||||||
static QSBMessageManager()
|
static QSBMessageManager()
|
||||||
{
|
{
|
||||||
foreach (var type in typeof(QSBMessage).GetDerivedTypes())
|
foreach (var type in typeof(QSBMessage).GetDerivedTypes())
|
||||||
{
|
{
|
||||||
var id = (ushort)type.FullName.GetStableHashCode();
|
var hash = type.FullName.GetStableHashCode();
|
||||||
_types.Add(id, type);
|
_types.Add(hash, type);
|
||||||
// call static constructor of message if needed
|
// call static constructor of message if needed
|
||||||
RuntimeHelpers.RunClassConstructor(type.TypeHandle);
|
RuntimeHelpers.RunClassConstructor(type.TypeHandle);
|
||||||
}
|
}
|
||||||
@ -149,10 +149,10 @@ public static class ReaderWriterExtensions
|
|||||||
{
|
{
|
||||||
private static QSBMessage ReadQSBMessage(this NetworkReader reader)
|
private static QSBMessage ReadQSBMessage(this NetworkReader reader)
|
||||||
{
|
{
|
||||||
var id = reader.ReadUShort();
|
var hash = reader.ReadInt();
|
||||||
if (!QSBMessageManager._types.TryGetValue(id, out var type))
|
if (!QSBMessageManager._types.TryGetValue(hash, out var type))
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"unknown QSBMessage type with id {id}", MessageType.Error);
|
DebugLog.DebugWrite($"unknown QSBMessage type with hash {hash}", MessageType.Error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
var msg = (QSBMessage)FormatterServices.GetUninitializedObject(type);
|
var msg = (QSBMessage)FormatterServices.GetUninitializedObject(type);
|
||||||
@ -163,8 +163,8 @@ public static class ReaderWriterExtensions
|
|||||||
private static void WriteQSBMessage(this NetworkWriter writer, QSBMessage msg)
|
private static void WriteQSBMessage(this NetworkWriter writer, QSBMessage msg)
|
||||||
{
|
{
|
||||||
var type = msg.GetType();
|
var type = msg.GetType();
|
||||||
var id = (ushort)type.FullName.GetStableHashCode();
|
var hash = type.FullName.GetStableHashCode();
|
||||||
writer.WriteUShort(id);
|
writer.WriteInt(hash);
|
||||||
msg.Serialize(writer);
|
msg.Serialize(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user