private static void AddCallBack(int seq, CustomHandler.PcCallBack callBack) { if (callBack == null) { return; } lock (callbackMapLock) { if (!callbacks.ContainsKey(seq)) { callbacks.Add(seq, callBack); } } }
public static void Invoke(string name, string value, CustomHandler.PcCallBack callback) { if (functions.ContainsKey(name) || socket == null) { throw new Exception("Not Register Callback"); } Command command = new Command(); command.cmd = Cmd.RPC_METHOD; command.socket = socket; RPCRequestBody rpcBody = new RPCRequestBody(); rpcBody.name = name; rpcBody.value = value; rpcBody.seq = ++seq; command.sendObj = rpcBody; AddCallBack(rpcBody.seq, callback); CommandDispatcher.SendCommand(command); }
public static void InvokeSeqCallBack(Command command) { RPCResponseBody rPCResponseBody = JsonParser.Deserialization <RPCResponseBody>(command); int seq = rPCResponseBody.seq; int status = rPCResponseBody.status; String name = rPCResponseBody.name; String value = rPCResponseBody.returnValue; if (status != 0) { Logger.w("RPC method call error,reponse = " + command.recvObj); } CustomHandler.PcCallBack pcCallBack = null; lock (callbackMapLock) { if (callbacks.ContainsKey(seq)) { pcCallBack = callbacks[seq]; callbacks.Remove(seq); } } if (pcCallBack == null) { Logger.w("RPC method can't find callback function, reponse = " + command.recvObj); } try { pcCallBack(status, value); } catch (System.Exception ex) { Logger.w(ex.Message, ex); } }