From a43a2d78138612102819d1e767b96fb374b698f3 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 18 三月 2021 15:33:27 +0800
Subject: [PATCH] 0312 IL表代码生成优化,foreach改for;增加快捷创建红点;IL绑定常用表
---
Assets/Plugins/PocoSDK/PocoManager.cs | 544 ++++++++++++++++++++++++++++--------------------------
1 files changed, 280 insertions(+), 264 deletions(-)
diff --git a/Assets/Plugins/PocoSDK/PocoManager.cs b/Assets/Plugins/PocoSDK/PocoManager.cs
index 1c33f3a..c2c46f8 100644
--- a/Assets/Plugins/PocoSDK/PocoManager.cs
+++ b/Assets/Plugins/PocoSDK/PocoManager.cs
@@ -14,306 +14,322 @@
public class PocoManager : MonoBehaviour
{
- public const int versionCode = 6;
- public int port = 5001;
- private bool mRunning;
- public AsyncTcpServer server = null;
- private RPCParser rpc = null;
- private SimpleProtocolFilter prot = null;
- private UnityDumper dumper = new UnityDumper();
- private ConcurrentDictionary<string, TcpClientState> inbox = new ConcurrentDictionary<string, TcpClientState>();
- private VRSupport vr_support = new VRSupport();
- private Dictionary<string, long> debugProfilingData = new Dictionary<string, long>() {
- { "dump", 0 },
- { "screenshot", 0 },
- { "handleRpcRequest", 0 },
- { "packRpcResponse", 0 },
- { "sendRpcResponse", 0 },
- };
+ public const int versionCode = 6;
+ public int port = 5001;
+ private bool mRunning;
+ public AsyncTcpServer server = null;
+ private RPCParser rpc = null;
+ private SimpleProtocolFilter prot = null;
+ private UnityDumper dumper = new UnityDumper();
+ private ConcurrentDictionary<string, TcpClientState> inbox = new ConcurrentDictionary<string, TcpClientState>();
+ private VRSupport vr_support = new VRSupport();
+ private Dictionary<string, long> debugProfilingData = new Dictionary<string, long>() {
+ { "dump", 0 },
+ { "screenshot", 0 },
+ { "handleRpcRequest", 0 },
+ { "packRpcResponse", 0 },
+ { "sendRpcResponse", 0 },
+ };
- class RPC : Attribute
- {
- }
+ class RPC : Attribute
+ {
+ }
- void Awake()
- {
- Application.runInBackground = true;
- DontDestroyOnLoad(this);
- prot = new SimpleProtocolFilter();
- rpc = new RPCParser();
- rpc.addRpcMethod("isVRSupported", vr_support.isVRSupported);
- rpc.addRpcMethod("hasMovementFinished", vr_support.IsQueueEmpty);
- rpc.addRpcMethod("RotateObject", vr_support.RotateObject);
- rpc.addRpcMethod("ObjectLookAt", vr_support.ObjectLookAt);
- rpc.addRpcMethod("Screenshot", Screenshot);
- rpc.addRpcMethod("GetScreenSize", GetScreenSize);
- rpc.addRpcMethod("Dump", Dump);
- rpc.addRpcMethod("GetDebugProfilingData", GetDebugProfilingData);
- rpc.addRpcMethod("SetText", SetText);
+ void Awake()
+ {
+ Application.runInBackground = true;
+ DontDestroyOnLoad(this);
+ prot = new SimpleProtocolFilter();
+ rpc = new RPCParser();
+ rpc.addRpcMethod("isVRSupported", vr_support.isVRSupported);
+ rpc.addRpcMethod("hasMovementFinished", vr_support.IsQueueEmpty);
+ rpc.addRpcMethod("RotateObject", vr_support.RotateObject);
+ rpc.addRpcMethod("ObjectLookAt", vr_support.ObjectLookAt);
+ rpc.addRpcMethod("Screenshot", Screenshot);
+ rpc.addRpcMethod("GetScreenSize", GetScreenSize);
+ rpc.addRpcMethod("Dump", Dump);
+ rpc.addRpcMethod("GetDebugProfilingData", GetDebugProfilingData);
+ rpc.addRpcMethod("SetText", SetText);
- rpc.addRpcMethod("GetSDKVersion", GetSDKVersion);
+ rpc.addRpcMethod("GetSDKVersion", GetSDKVersion);
- mRunning = true;
+ mRunning = true;
- for (int i = 0; i < 5; i++) {
- this.server = new AsyncTcpServer (port + i);
- this.server.Encoding = Encoding.UTF8;
- this.server.ClientConnected +=
- new EventHandler<TcpClientConnectedEventArgs> (server_ClientConnected);
- this.server.ClientDisconnected +=
- new EventHandler<TcpClientDisconnectedEventArgs> (server_ClientDisconnected);
- this.server.DatagramReceived +=
- new EventHandler<TcpDatagramReceivedEventArgs<byte[]>> (server_Received);
- try {
- this.server.Start ();
- Debug.Log (string.Format("Tcp server started and listening at {0}", server.Port));
- break;
- } catch (SocketException e) {
- // try next available port
- this.server = null;
- }
- }
- if (this.server == null) {
- Debug.LogError (string.Format("Unable to find an unused port from {0} to {1}", port, port + 5));
- }
- vr_support.ClearCommands();
- }
+ for (int i = 0; i < 5; i++)
+ {
+ this.server = new AsyncTcpServer(port + i);
+ this.server.Encoding = Encoding.UTF8;
+ this.server.ClientConnected +=
+ new EventHandler<TcpClientConnectedEventArgs>(server_ClientConnected);
+ this.server.ClientDisconnected +=
+ new EventHandler<TcpClientDisconnectedEventArgs>(server_ClientDisconnected);
+ this.server.DatagramReceived +=
+ new EventHandler<TcpDatagramReceivedEventArgs<byte[]>>(server_Received);
+ try
+ {
+ this.server.Start();
+ Debug.Log(string.Format("Tcp server started and listening at {0}", server.Port));
+ break;
+ }
+ catch (SocketException e)
+ {
+ Debug.Log(string.Format("Tcp server bind to port {0} Failed!", server.Port));
+ Debug.Log("--- Failed Trace Begin ---");
+ Debug.LogError(e);
+ Debug.Log("--- Failed Trace End ---");
+ // try next available port
+ this.server = null;
+ }
+ }
+ if (this.server == null)
+ {
+ Debug.LogError(string.Format("Unable to find an unused port from {0} to {1}", port, port + 5));
+ }
+ vr_support.ClearCommands();
+ }
- static void server_ClientConnected(object sender, TcpClientConnectedEventArgs e)
- {
- Debug.Log(string.Format("TCP client {0} has connected.",
- e.TcpClient.Client.RemoteEndPoint.ToString()));
- }
+ static void server_ClientConnected(object sender, TcpClientConnectedEventArgs e)
+ {
+ Debug.Log(string.Format("TCP client {0} has connected.",
+ e.TcpClient.Client.RemoteEndPoint.ToString()));
+ }
- static void server_ClientDisconnected(object sender, TcpClientDisconnectedEventArgs e)
- {
- Debug.Log(string.Format("TCP client {0} has disconnected.",
- e.TcpClient.Client.RemoteEndPoint.ToString()));
- }
+ static void server_ClientDisconnected(object sender, TcpClientDisconnectedEventArgs e)
+ {
+ Debug.Log(string.Format("TCP client {0} has disconnected.",
+ e.TcpClient.Client.RemoteEndPoint.ToString()));
+ }
- private void server_Received(object sender, TcpDatagramReceivedEventArgs<byte[]> e)
- {
- Debug.Log(string.Format("Client : {0} --> {1}",
- e.Client.TcpClient.Client.RemoteEndPoint.ToString(), e.Datagram.Length));
- TcpClientState internalClient = e.Client;
- string tcpClientKey = internalClient.TcpClient.Client.RemoteEndPoint.ToString();
- inbox.AddOrUpdate(tcpClientKey, internalClient, (n, o) =>
- {
- return internalClient;
- });
- }
+ private void server_Received(object sender, TcpDatagramReceivedEventArgs<byte[]> e)
+ {
+ Debug.Log(string.Format("Client : {0} --> {1}",
+ e.Client.TcpClient.Client.RemoteEndPoint.ToString(), e.Datagram.Length));
+ TcpClientState internalClient = e.Client;
+ string tcpClientKey = internalClient.TcpClient.Client.RemoteEndPoint.ToString();
+ inbox.AddOrUpdate(tcpClientKey, internalClient, (n, o) =>
+ {
+ return internalClient;
+ });
+ }
- [RPC]
- private object Dump(List<object> param)
- {
- var onlyVisibleNode = true;
- if (param.Count > 0)
- {
- onlyVisibleNode = (bool)param[0];
- }
- var sw = new Stopwatch();
- sw.Start();
- var h = dumper.dumpHierarchy(onlyVisibleNode);
- debugProfilingData["dump"] = sw.ElapsedMilliseconds;
+ [RPC]
+ private object Dump(List<object> param)
+ {
+ var onlyVisibleNode = true;
+ if (param.Count > 0)
+ {
+ onlyVisibleNode = (bool)param[0];
+ }
+ var sw = new Stopwatch();
+ sw.Start();
+ var h = dumper.dumpHierarchy(onlyVisibleNode);
+ debugProfilingData["dump"] = sw.ElapsedMilliseconds;
- return h;
- }
+ return h;
+ }
- [RPC]
- private object Screenshot(List<object> param)
- {
- var sw = new Stopwatch();
- sw.Start();
+ [RPC]
+ private object Screenshot(List<object> param)
+ {
+ var sw = new Stopwatch();
+ sw.Start();
- var tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
- tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
- tex.Apply(false);
- byte[] fileBytes = tex.EncodeToJPG(80);
- var b64img = Convert.ToBase64String(fileBytes);
- debugProfilingData["screenshot"] = sw.ElapsedMilliseconds;
- return new object[] { b64img, "jpg" };
- }
+ var tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
+ tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
+ tex.Apply(false);
+ byte[] fileBytes = tex.EncodeToJPG(80);
+ var b64img = Convert.ToBase64String(fileBytes);
+ debugProfilingData["screenshot"] = sw.ElapsedMilliseconds;
+ return new object[] { b64img, "jpg" };
+ }
- [RPC]
- private object GetScreenSize(List<object> param)
- {
- return new float[] { Screen.width, Screen.height };
- }
+ [RPC]
+ private object GetScreenSize(List<object> param)
+ {
+ return new float[] { Screen.width, Screen.height };
+ }
- public void stopListening()
- {
- mRunning = false;
- server.Stop();
- }
+ public void stopListening()
+ {
+ mRunning = false;
+ server?.Stop();
+ }
- [RPC]
- private object GetDebugProfilingData(List<object> param)
- {
- return debugProfilingData;
- }
+ [RPC]
+ private object GetDebugProfilingData(List<object> param)
+ {
+ return debugProfilingData;
+ }
- [RPC]
- private object SetText(List<object> param)
- {
- var instanceId = Convert.ToInt32(param[0]);
- var textVal = param[1] as string;
- foreach (var go in GameObject.FindObjectsOfType<GameObject>())
- {
- if (go.GetInstanceID() == instanceId)
- {
- return UnityNode.SetText(go, textVal);
- }
- }
- return false;
- }
+ [RPC]
+ private object SetText(List<object> param)
+ {
+ var instanceId = Convert.ToInt32(param[0]);
+ var textVal = param[1] as string;
+ foreach (var go in GameObject.FindObjectsOfType<GameObject>())
+ {
+ if (go.GetInstanceID() == instanceId)
+ {
+ return UnityNode.SetText(go, textVal);
+ }
+ }
+ return false;
+ }
- [RPC]
- private object GetSDKVersion(List<object> param)
- {
- return versionCode;
- }
+ [RPC]
+ private object GetSDKVersion(List<object> param)
+ {
+ return versionCode;
+ }
- void Update()
- {
- foreach (TcpClientState client in inbox.Values)
- {
- List<string> msgs = client.Prot.swap_msgs();
- msgs.ForEach(delegate (string msg)
- {
- var sw = new Stopwatch();
- sw.Start();
- var t0 = sw.ElapsedMilliseconds;
- string response = rpc.HandleMessage(msg);
- var t1 = sw.ElapsedMilliseconds;
- byte[] bytes = prot.pack(response);
- var t2 = sw.ElapsedMilliseconds;
- server.Send(client.TcpClient, bytes);
- var t3 = sw.ElapsedMilliseconds;
- debugProfilingData["handleRpcRequest"] = t1 - t0;
- debugProfilingData["packRpcResponse"] = t2 - t1;
- TcpClientState internalClientToBeThrowAway;
- string tcpClientKey = client.TcpClient.Client.RemoteEndPoint.ToString();
- inbox.TryRemove(tcpClientKey, out internalClientToBeThrowAway);
- });
- }
+ void Update()
+ {
+ foreach (TcpClientState client in inbox.Values)
+ {
+ List<string> msgs = client.Prot.swap_msgs();
+ msgs.ForEach(delegate (string msg)
+ {
+ var sw = new Stopwatch();
+ sw.Start();
+ var t0 = sw.ElapsedMilliseconds;
+ string response = rpc.HandleMessage(msg);
+ var t1 = sw.ElapsedMilliseconds;
+ byte[] bytes = prot.pack(response);
+ var t2 = sw.ElapsedMilliseconds;
+ server.Send(client.TcpClient, bytes);
+ var t3 = sw.ElapsedMilliseconds;
+ debugProfilingData["handleRpcRequest"] = t1 - t0;
+ debugProfilingData["packRpcResponse"] = t2 - t1;
+ TcpClientState internalClientToBeThrowAway;
+ string tcpClientKey = client.TcpClient.Client.RemoteEndPoint.ToString();
+ inbox.TryRemove(tcpClientKey, out internalClientToBeThrowAway);
+ });
+ }
- vr_support.PeekCommand();
- }
+ vr_support.PeekCommand();
+ }
- void OnApplicationQuit()
- {
- // stop listening thread
- stopListening();
- }
+ void OnApplicationQuit()
+ {
+ // stop listening thread
+ stopListening();
+ }
+
+ void OnDestroy()
+ {
+ // stop listening thread
+ stopListening();
+ }
+
}
public class RPCParser
{
- public delegate object RpcMethod(List<object> param);
+ public delegate object RpcMethod(List<object> param);
- protected Dictionary<string, RpcMethod> RPCHandler = new Dictionary<string, RpcMethod>();
- private JsonSerializerSettings settings = new JsonSerializerSettings()
- {
- StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
- };
+ protected Dictionary<string, RpcMethod> RPCHandler = new Dictionary<string, RpcMethod>();
+ private JsonSerializerSettings settings = new JsonSerializerSettings()
+ {
+ StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
+ };
- public string HandleMessage(string json)
- {
- Dictionary<string, object> data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, settings);
- if (data.ContainsKey("method"))
- {
- string method = data["method"].ToString();
- List<object> param = null;
- if (data.ContainsKey("params"))
- {
- param = ((JArray)(data["params"])).ToObject<List<object>>();
- }
+ public string HandleMessage(string json)
+ {
+ Dictionary<string, object> data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, settings);
+ if (data.ContainsKey("method"))
+ {
+ string method = data["method"].ToString();
+ List<object> param = null;
+ if (data.ContainsKey("params"))
+ {
+ param = ((JArray)(data["params"])).ToObject<List<object>>();
+ }
- object idAction = null;
- if (data.ContainsKey("id"))
- {
- // if it have id, it is a request
- idAction = data["id"];
- }
+ object idAction = null;
+ if (data.ContainsKey("id"))
+ {
+ // if it have id, it is a request
+ idAction = data["id"];
+ }
- string response = null;
- object result = null;
- try
- {
- result = RPCHandler[method](param);
- }
- catch (Exception e)
- {
- // return error response
- Debug.Log(e);
- response = formatResponseError(idAction, null, e);
- return response;
- }
+ string response = null;
+ object result = null;
+ try
+ {
+ result = RPCHandler[method](param);
+ }
+ catch (Exception e)
+ {
+ // return error response
+ Debug.Log(e);
+ response = formatResponseError(idAction, null, e);
+ return response;
+ }
- // return result response
- response = formatResponse(idAction, result);
- return response;
+ // return result response
+ response = formatResponse(idAction, result);
+ return response;
- }
- else
- {
- // do not handle response
- Debug.Log("ignore message without method");
- return null;
- }
- }
+ }
+ else
+ {
+ // do not handle response
+ Debug.Log("ignore message without method");
+ return null;
+ }
+ }
- // Call a method in the server
- public string formatRequest(string method, object idAction, List<object> param = null)
- {
- Dictionary<string, object> data = new Dictionary<string, object>();
- data["jsonrpc"] = "2.0";
- data["method"] = method;
- if (param != null)
- {
- data["params"] = JsonConvert.SerializeObject(param, settings);
- }
- // if idAction is null, it is a notification
- if (idAction != null)
- {
- data["id"] = idAction;
- }
- return JsonConvert.SerializeObject(data, settings);
- }
+ // Call a method in the server
+ public string formatRequest(string method, object idAction, List<object> param = null)
+ {
+ Dictionary<string, object> data = new Dictionary<string, object>();
+ data["jsonrpc"] = "2.0";
+ data["method"] = method;
+ if (param != null)
+ {
+ data["params"] = JsonConvert.SerializeObject(param, settings);
+ }
+ // if idAction is null, it is a notification
+ if (idAction != null)
+ {
+ data["id"] = idAction;
+ }
+ return JsonConvert.SerializeObject(data, settings);
+ }
- // Send a response from a request the server made to this client
- public string formatResponse(object idAction, object result)
- {
- Dictionary<string, object> rpc = new Dictionary<string, object>();
- rpc["jsonrpc"] = "2.0";
- rpc["id"] = idAction;
- rpc["result"] = result;
- return JsonConvert.SerializeObject(rpc, settings);
- }
+ // Send a response from a request the server made to this client
+ public string formatResponse(object idAction, object result)
+ {
+ Dictionary<string, object> rpc = new Dictionary<string, object>();
+ rpc["jsonrpc"] = "2.0";
+ rpc["id"] = idAction;
+ rpc["result"] = result;
+ return JsonConvert.SerializeObject(rpc, settings);
+ }
- // Send a error to the server from a request it made to this client
- public string formatResponseError(object idAction, IDictionary<string, object> data, Exception e)
- {
- Dictionary<string, object> rpc = new Dictionary<string, object>();
- rpc["jsonrpc"] = "2.0";
- rpc["id"] = idAction;
+ // Send a error to the server from a request it made to this client
+ public string formatResponseError(object idAction, IDictionary<string, object> data, Exception e)
+ {
+ Dictionary<string, object> rpc = new Dictionary<string, object>();
+ rpc["jsonrpc"] = "2.0";
+ rpc["id"] = idAction;
- Dictionary<string, object> errorDefinition = new Dictionary<string, object>();
- errorDefinition["code"] = 1;
- errorDefinition["message"] = e.ToString();
+ Dictionary<string, object> errorDefinition = new Dictionary<string, object>();
+ errorDefinition["code"] = 1;
+ errorDefinition["message"] = e.ToString();
- if (data != null)
- {
- errorDefinition["data"] = data;
- }
+ if (data != null)
+ {
+ errorDefinition["data"] = data;
+ }
- rpc["error"] = errorDefinition;
- return JsonConvert.SerializeObject(rpc, settings);
- }
+ rpc["error"] = errorDefinition;
+ return JsonConvert.SerializeObject(rpc, settings);
+ }
- public void addRpcMethod(string name, RpcMethod method)
- {
- RPCHandler[name] = method;
- }
+ public void addRpcMethod(string name, RpcMethod method)
+ {
+ RPCHandler[name] = method;
+ }
}
--
Gitblit v1.8.0