Пример #1
0
 public void AjaxRequestReceivedEvent_Test()
 {
     SnowflakeEventManager.InitEventSource();
     new StandardEvents().RegisterSnowflakeEvents(SnowflakeEventManager.EventSource);
     var fakeCoreService = new Mock<ICoreService>();
     var fakeJsRequest = new Mock<IJSRequest>();
     var args = new AjaxRequestReceivedEventArgs(fakeCoreService.Object, fakeJsRequest.Object);
     SnowflakeEventManager.EventSource.Subscribe<AjaxRequestReceivedEventArgs>((s, e) =>
     {
         Assert.Equal(args, e);
     });
     SnowflakeEventManager.EventSource.RaiseEvent(args);
 }
Пример #2
0
        public string CallMethod(IJSRequest request)
        {
            var callMethodEvent = new AjaxRequestReceivedEventArgs(this.CoreInstance, request);
            SnowflakeEventManager.EventSource.RaiseEvent(callMethodEvent);
            request = callMethodEvent.ReceivedRequest;
            AjaxResponseSendingEventArgs sendResultEvent;
            try
            {
                IJSResponse result;
                IJSMethod jsMethod = this.GlobalNamespace[request.NameSpace].JavascriptMethods[request.MethodName];
                foreach (AjaxMethodParameterAttribute attr in jsMethod.MethodInfo.GetCustomAttributes<AjaxMethodParameterAttribute>()
                    .Where(attr => attr.Required)
                    .Where(attr => !(request.MethodParameters.Keys.Contains(attr.ParameterName))))
                {
                    result = new JSResponse(request, JSResponse.GetErrorResponse($"missing required param {attr.ParameterName}"), false);
                    sendResultEvent = new AjaxResponseSendingEventArgs(this.CoreInstance, result);
                    SnowflakeEventManager.EventSource.RaiseEvent(sendResultEvent);
                    return sendResultEvent.SendingResponse.GetJson();
                }

                result = jsMethod.Method.Invoke(request);
                sendResultEvent = new AjaxResponseSendingEventArgs(this.CoreInstance, result);
                SnowflakeEventManager.EventSource.RaiseEvent(sendResultEvent);
                return sendResultEvent.SendingResponse.GetJson();
            }
            catch (KeyNotFoundException)
            {
                var result = new JSResponse(request, JSResponse.GetErrorResponse($"method {request.MethodName} not found in namespace {request.NameSpace}"), false);
                sendResultEvent = new AjaxResponseSendingEventArgs(this.CoreInstance, result);
                SnowflakeEventManager.EventSource.RaiseEvent(sendResultEvent);
                return sendResultEvent.SendingResponse.GetJson();
            }
            catch (Exception e)
            {
                var result = new JSResponse(request, e, false);
                sendResultEvent = new AjaxResponseSendingEventArgs(this.CoreInstance, result);
                SnowflakeEventManager.EventSource.RaiseEvent(sendResultEvent);
                return sendResultEvent.SendingResponse.GetJson();
            }
        }