private async void OnNetworkMessageReceived(object sender, OnNetworkMessageReceivedEventArgs e) { if (e.Message.Header != NetworkHeader.HEADER_CALL && e.Message.Header != NetworkHeader.HEADER_MOVE) { OnServerExceptionOccurred?.Start(this, new OnServerExceptionOccurredEventArgs(new Exception("Invalid message type received!"))); return; } var RemoteEndPoint = ((NLCSocket)sender).BaseSocket.RemoteEndPoint; object Result = null; NetworkHeader ResultHeader; if (!RemotingMethods.TryGetValue(e.Message.Tag, out var TargetMethod)) { OnServerExceptionOccurred?.Start(this, new OnServerExceptionOccurredEventArgs(new Exception("Client attempted to invoke invalid function!"))); ResultHeader = NetworkHeader.NONE; } else { var Parameters = new List <object>(); if (TargetMethod.WithContext) { Parameters.Add(RemoteEndPoint); } Parameters.AddRange((object[])e.Message.Data); TimeSpan Duration = default(TimeSpan); try { var sw = Stopwatch.StartNew(); Result = await TargetMethod.Method.InvokeWrapper(TargetMethod.HasAsyncResult, Clients[RemoteEndPoint].SharedClass, Parameters.ToArray()); sw.Stop(); Duration = sw.Elapsed; ResultHeader = NetworkHeader.HEADER_RETURN; } catch (Exception ex) { OnServerExceptionOccurred?.Start(this, new OnServerExceptionOccurredEventArgs(ex)); ResultHeader = NetworkHeader.HEADER_ERROR; } OnServerMethodInvoked?.Start(this, new OnServerMethodInvokedEventArgs(RemoteEndPoint, e.Message.Tag, Duration, ResultHeader == NetworkHeader.HEADER_ERROR)); } var Event = new NetworkEvent(ResultHeader, e.Message.CallbackGuid, null, Result); await((NLCSocket)sender).BlockingSend(Event); }
private void OnCallbackMessageReceived(object sender, OnNetworkMessageReceivedEventArgs e) { if (e.Message.Header != NetworkHeader.HEADER_RETURN && e.Message.Header != NetworkHeader.HEADER_ERROR) { throw new Exception("Invalid message type received!"); } Callbacks[e.Message.CallbackGuid].Result = e.Message; Callbacks[e.Message.CallbackGuid].Event.Set(); }