void ExecuteMessage(BinaryMessage msg) { BinaryMessage response = null; var sw = System.Diagnostics.Stopwatch.StartNew(); try { if (msg.Name == "FlushMessages") { response = msg.CreateResponse(); } else { response = listener.ProcessMessage(msg); } } catch (Exception ex) { if (ex is TargetInvocationException) { ex = ((TargetInvocationException)ex).InnerException; } server.LogError(ex); response = msg.CreateErrorResponse(ex.Message, !(ex is RemoteProcessException)); Console.WriteLine(ex); } if (response != null) { response.Id = msg.Id; response.ProcessingTime = sw.ElapsedMilliseconds; server.SendResponse(response); } else if (!msg.OneWay) { server.SendResponse(msg.CreateErrorResponse("Got no response from server", true)); } }
internal BinaryMessage ProcessMessage(BinaryMessage msg) { MethodInfo m; if (handlers.TryGetValue(msg.Name, out m)) { var r = m.Invoke(target, new object [] { msg }); if (r is BinaryMessage) { return((BinaryMessage)r); } else { return(msg.CreateResponse()); } } return(null); }