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();
}
}