private async void DataServiceRequestReceived()

in MiddlemanElectronSampleApp/AppServiceHost/AppServiceUWP/App.xaml.cs [251:355]


        private async void DataServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
        {
            Debug.WriteLine($"DataServiceRequestReceived");

            AppServiceResponse result;
            AppServiceResponseStatus resultStatus;
            var messageDeferral = args.GetDeferral();
            var request = args.Request;
            var m = request.Message;
            object command;
            try
            {
                m.TryGetValue("Command", out command);
                switch (command as string)
                {
                    case "Connect":
                        object role;
                        m.TryGetValue("Role", out role);
                        if (role as string == "DataStreamerConnect") // Client
                        { 
                            _dataConnection = sender;
                        }
                        var response = new ValueSet();
                        response.Add("Response", "OK");
                        await request.SendResponseAsync(response);
                        SendStatusAsync();
                        break;
                    case "Write":
                        object data;
                        if (m.TryGetValue("Data", out data))
                        {
                            Debug.WriteLine($"Write data:{data}");
                            if (_excelConnection != null)
                            {
                                result = await _excelConnection.SendMessageAsync(m);

                                if (result.Status != AppServiceResponseStatus.Success)
                                {
                                    Debug.WriteLine($"Failed to send data: {result.Status.ToString()}");
                                }
                                else
                                {
                                    Debug.WriteLine($"Sent: {data as string}");
                                }
                            }
                            else
                            {
                                Debug.WriteLine($"Failed to send data: no Excel Connection exists");
                            }
                        }
                        break;
                    case "Read":
                        var msg = new ValueSet();
                        AppServiceResponse res = null;
                        msg["Command"] = "Read";

                        if (_excelConnection != null)
                        {
                            res = _excelConnection.SendMessageAsync(msg).AsTask().Result; ;
                            if (res.Status == AppServiceResponseStatus.Success)
                            {
                                Debug.WriteLine($"Data recieved from Excel: {res.Message.Count}");
                                if (_dataConnection != null)
                                {
                                    //var clientRes = _dataConnection.SendMessageAsync(res.Message).AsTask().Result;
                                    var clientRes = await request.SendResponseAsync(res.Message);

                                    if (clientRes != AppServiceResponseStatus.Success)
                                    {
                                        Debug.WriteLine($"Failed to send read data to client: {clientRes.ToString()}");
                                    } else
                                    {
                                        Debug.WriteLine($"Data sent to client: {res.Message.Count}");
                                    }
                                }
                            }
                            else
                            {
                                Debug.WriteLine($"Failed to send data: {res.Status.ToString()}");
                            }
                        }
                        break;
                    case "Status":
                        var message = new ValueSet();
                        message.Add("Command", "Status");
                        message.Add("Data", String.Format("Client:{0},Excel:{1}", _dataConnection != null, _excelConnection != null));
                        resultStatus = request.SendResponseAsync(message).AsTask().Result;
                        if (resultStatus != AppServiceResponseStatus.Success)
                        {
                            Debug.WriteLine($"Failed to send data: {resultStatus}");
                        }
                        break;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine($"Exception while sending the response : {e.Message}");
            }
            finally
            {
                // Complete the deferral so that the platform knows that we're done responding to the app service call.
                // Note for error handling: this must be called even if SendResponseAsync() throws an exception.
                messageDeferral.Complete();
            }
        }