public ServiceMessageEventArgs(ServiceMessageEventArgs parentArgs, SSSBMessage message) { _message = message ?? parentArgs.Message; _service = parentArgs._service; _token = parentArgs._token; _taskID = parentArgs._taskID; _serviceScope = parentArgs._serviceScope; _tcs = parentArgs._tcs; _completion = parentArgs._completion; _services = parentArgs._services; }
private Func <Task> _GetMessageHandler(SqlConnection dbconnection, SSSBMessage message, CancellationToken token) { IMessageHandler <ServiceMessageEventArgs> messageHandler; // if we registered custom handlers for predefined message types if (_messageHandlers.TryGetValue(message.MessageType, out messageHandler)) { return(async() => { ServiceMessageEventArgs serviceArgs = this.CreateServiceMessageEventArgs(message, token); try { var customHandlerFactory = serviceArgs.Services.GetRequiredService <ICustomMessageHandlerFactory>(); var customHandler = customHandlerFactory.Create(serviceArgs); await customHandler.HandleMessage(dbconnection, messageHandler, serviceArgs); } catch (Exception ex) { serviceArgs.TaskCompletionSource.TrySetException(ex); throw; } }); } else if (message.MessageType == SSSBMessage.EndDialogMessageType) { return(() => _standardMessageHandlers.EndDialogMessageHandler(dbconnection, message)); } else if (message.MessageType == SSSBMessage.ErrorMessageType) { return(() => _standardMessageHandlers.ErrorMessageHandler(dbconnection, message)); } else if (message.MessageType == SSSBMessage.EchoMessageType && message.ContractName == EchoContractName) { return(() => _standardMessageHandlers.EchoMessageHandler(dbconnection, message)); } else { string err = string.Format(ServiceBrokerResources.UnknownMessageTypeErrMsg, message.MessageType); return(() => _standardMessageHandlers.EndDialogMessageWithErrorHandler(dbconnection, message, err, 1)); } }
protected virtual ServiceMessageEventArgs CreateServiceMessageEventArgs(SSSBMessage message, CancellationToken cancellation) { ServiceMessageEventArgs args = new ServiceMessageEventArgs(message, this._sssbService, cancellation, _services.CreateScope()); return(args); }