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