Example #1
0
 public Task Handle(ModelA model, WebSocketMessage message, IHorseWebSocket client)
 {
     Console.WriteLine("Model A received: " + model.Value);
     return(Task.CompletedTask);
 }
Example #2
0
 public Task OnError(Exception exception, ModelA model, WebSocketMessage message, IHorseWebSocket client)
 {
     throw new NotImplementedException();
 }
        public override async Task Execute(object model, WebSocketMessage message, IHorseWebSocket client)
        {
            IWebSocketMessageHandler <TModel> handler = null;

            try
            {
                if (_instance != null)
                {
                    handler = _instance;
                }
                else if (_factory != null)
                {
                    handler = (IWebSocketMessageHandler <TModel>)_factory(_consumerType);
                }
                else
                {
                    return;
                }

                await handler.Handle((TModel)model, message, client);
            }
            catch (Exception e)
            {
                Action <Exception> errorAction = null;
                if (_errorFactory != null)
                {
                    try
                    {
                        errorAction = _errorFactory();
                    }
                    catch
                    {
                    }
                }

                if (handler == null)
                {
                    if (errorAction != null)
                    {
                        errorAction(e);
                    }

                    return;
                }

                try
                {
                    await handler.OnError(e, (TModel)model, message, client);

                    if (errorAction != null)
                    {
                        errorAction(e);
                    }
                }
                catch (Exception e2)
                {
                    if (errorAction != null)
                    {
                        errorAction(e2);
                    }
                }
            }
        }