using Godot; using Godot.Collections; namespace RPPackage { public static class RPHelper { public static Dictionary SerializeRPMessage(RPMessage message) { return message.ToDictionary(); } public static RPMessage? DeserializeRPMessage(Dictionary data) { if (!data.ContainsKey("type") || !data.ContainsKey("cmd")) { return null; } return new RPMessage { Type = (string)data["type"], Cmd = (string)data["cmd"], Code = data.ContainsKey("code") ? (string)data["code"] : null, Uid = data.ContainsKey("uid") ? (string)data["uid"] : null, Token = data.ContainsKey("token") ? (string)data["token"] : null, Data = data.ContainsKey("data") ? data["data"].AsGodotDictionary() : null, }; } // 假设你有WebSocket通信的实现,这里仅展示如何使用上述方法 public static void SendRPMessage(this EventDrivenWebSocket ws, RPMessage message) { ws.SendJsonEx(RPHelper.SerializeRPMessage(message)); } public static RPMessage? HandleIncomingMessage(string jsonMessage) { var dataDict = Json.ParseString(jsonMessage).AsGodotDictionary(); if (dataDict != null) { return RPHelper.DeserializeRPMessage(dataDict); } else { GD.PrintErr("Failed to parse incoming message."); return null; } } } }