From 3d4cada243b3046708cd55ca8f485b14043471bd Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Sun, 26 Dec 2021 18:57:07 -0800 Subject: [PATCH] use FormatterServices.GetUninitializedObject --- QSB/Messaging/QSBMessageManager.cs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/QSB/Messaging/QSBMessageManager.cs b/QSB/Messaging/QSBMessageManager.cs index d26187de..07383042 100644 --- a/QSB/Messaging/QSBMessageManager.cs +++ b/QSB/Messaging/QSBMessageManager.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; +using System.Runtime.Serialization; namespace QSB.Messaging { @@ -66,7 +67,7 @@ namespace QSB.Messaging private static void OnServerReceiveRaw(QNetworkMessage netMsg) { var msgType = netMsg.MsgType; - var msg = (QSBMessageRaw)Activator.CreateInstance(_msgTypeToType[msgType]); + var msg = (QSBMessageRaw)FormatterServices.GetUninitializedObject(_msgTypeToType[msgType]); netMsg.ReadMessage(msg); QNetworkServer.SendToAll(msgType, msg); @@ -75,7 +76,7 @@ namespace QSB.Messaging private static void OnClientReceiveRaw(QNetworkMessage netMsg) { var msgType = netMsg.MsgType; - var msg = (QSBMessageRaw)Activator.CreateInstance(_msgTypeToType[msgType]); + var msg = (QSBMessageRaw)FormatterServices.GetUninitializedObject(_msgTypeToType[msgType]); netMsg.ReadMessage(msg); msg.OnReceive(); @@ -84,7 +85,7 @@ namespace QSB.Messaging private static void OnServerReceive(QNetworkMessage netMsg) { var msgType = netMsg.MsgType; - var msg = (QSBMessage)Activator.CreateInstance(_msgTypeToType[msgType]); + var msg = (QSBMessage)FormatterServices.GetUninitializedObject(_msgTypeToType[msgType]); netMsg.ReadMessage(msg); if (msg.To == uint.MaxValue) @@ -110,7 +111,7 @@ namespace QSB.Messaging private static void OnClientReceive(QNetworkMessage netMsg) { var msgType = netMsg.MsgType; - var msg = (QSBMessage)Activator.CreateInstance(_msgTypeToType[msgType]); + var msg = (QSBMessage)FormatterServices.GetUninitializedObject(_msgTypeToType[msgType]); netMsg.ReadMessage(msg); if (PlayerTransformSync.LocalInstance == null) @@ -124,9 +125,9 @@ namespace QSB.Messaging var player = QSBPlayerManager.GetPlayer(msg.From); if (!player.IsReady - && player.PlayerId != QSBPlayerManager.LocalPlayerId - && player.State is ClientState.AliveInSolarSystem or ClientState.AliveInEye or ClientState.DeadInSolarSystem - && msg is not (PlayerInformationMessage or PlayerReadyMessage or RequestStateResyncMessage or ServerStateMessage)) + && player.PlayerId != QSBPlayerManager.LocalPlayerId + && player.State is ClientState.AliveInSolarSystem or ClientState.AliveInEye or ClientState.DeadInSolarSystem + && msg is not (PlayerInformationMessage or PlayerReadyMessage or RequestStateResyncMessage or ServerStateMessage)) { DebugLog.ToConsole($"Warning - Got message {msg} from player {msg.From}, but they were not ready. Asking for state resync, just in case.", MessageType.Warning); new RequestStateResyncMessage().Send(); @@ -159,21 +160,21 @@ namespace QSB.Messaging public static void SendRaw(this M msg) - where M : QSBMessageRaw, new() + where M : QSBMessageRaw { var msgType = _typeToMsgType[typeof(M)]; QNetworkManager.singleton.client.Send(msgType, msg); } public static void ServerSendRaw(this M msg, QNetworkConnection conn) - where M : QSBMessageRaw, new() + where M : QSBMessageRaw { var msgType = _typeToMsgType[typeof(M)]; conn.Send(msgType, msg); } public static void Send(this M msg) - where M : QSBMessage, new() + where M : QSBMessage { if (PlayerTransformSync.LocalInstance == null) { @@ -188,7 +189,7 @@ namespace QSB.Messaging public static void SendMessage(this T worldObject, M msg) where T : IWorldObject - where M : QSBWorldObjectMessage, new() + where M : QSBWorldObjectMessage { msg.ObjectId = worldObject.ObjectId; Send(msg);