Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
        }