/// <summary> /// Registers Rpc-related services with the Dependency Injection provider /// </summary> private void ConfigureRpcServices(IServiceCollection services) { // Register our RPC services and tie it to a sample service services.AddSingleton <IRpcService>((services) => { var deviceClient = services.GetService <DeviceClient>(); var registration = services.GetService <IDeviceRegistrationProvider>(); var handler = new DispatchingClientMessageHandler(); var jsonRpc = new JsonRpc(handler); // Receive deviceClient.SetMethodHandlerAsync(_ConfigurationOptions.RpcMethodName, (request, context) => { handler.Dispatch(request.DataAsJson, registration.DeviceId); return(Task.FromResult(new MethodResponse(new byte[0], 200))); }, null).ConfigureAwait(false).GetAwaiter().GetResult(); // Send handler.SendAsync = async(message, clientId) => { var iotMessage = new Message(Encoding.UTF8.GetBytes(message)); await deviceClient.SendEventAsync(iotMessage); }; jsonRpc.StartListening(); return(jsonRpc.Attach <IRpcService>()); }); }
public async Task Rpc([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log) { var messageData = GetMessageDataFromEvent(eventGridEvent); log.LogTrace($"Received message from {messageData.DeviceId}"); log.LogTrace(messageData.Message); _MessageHandler.Dispatch(messageData.Message, messageData.DeviceId); _MessageHandler.Complete(); await _JsonRpc.Completion; log.LogTrace($"Finished handling message from {messageData.DeviceId}"); }