private async void ProcessRequestAsync(StreamSocket socket) { HttpRequest request; try { request = HttpRequest.Read(socket); } catch (Exception ex) { await WriteInternalServerErrorResponse(socket, ex); return; } if (AcceptedVerbs.Contains(request.Method.Method)) { HttpResponse response; try { response = await restHandler.Handle(request); } catch (Exception ex) { await WriteInternalServerErrorResponse(socket, ex); return; } await WriteResponse(response, socket); await socket.CancelIOAsync(); socket.Dispose(); } }
private static async Task Send(StreamSocket socket, object data) { if (socket != null) { using (var writer = new DataWriter(socket.OutputStream)) { var str = Transport.Serialize(data); writer.WriteUInt32(writer.MeasureString(str)); writer.WriteString(str); try { await writer.StoreAsync(); //await writer.FlushAsync(); } catch (Exception exception) { // If this is an unknown status it means that the error if fatal and retry will likely fail. if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } } writer.DetachStream(); } await socket.CancelIOAsync(); socket.Dispose(); } }
private async void ConnectButton_Click(object sender, RoutedEventArgs e) { ApplicationData.Current.LocalSettings.Values["hostname"] = TargetServerTextBox.Text; ApplicationData.Current.LocalSettings.Values["port"] = port; try { SocketActivityInformation socketInformation; if (!SocketActivityInformation.AllSockets.TryGetValue(socketId, out socketInformation)) { socket = new StreamSocket(); socket.EnableTransferOwnership(task.TaskId, SocketActivityConnectedStandbyAction.Wake); var targetServer = new HostName(TargetServerTextBox.Text); await socket.ConnectAsync(targetServer, port); // To demonstrate usage of CancelIOAsync async, have a pending read on the socket and call // cancel before transfering the socket. DataReader reader = new DataReader(socket.InputStream); reader.InputStreamOptions = InputStreamOptions.Partial; var read = reader.LoadAsync(250); read.Completed += (info, status) => { }; await socket.CancelIOAsync(); socket.TransferOwnership(socketId); socket = null; } ConnectButton.IsEnabled = false; rootPage.NotifyUser("Connected. You may close the application", NotifyType.StatusMessage); } catch (Exception exception) { rootPage.NotifyUser(exception.Message, NotifyType.ErrorMessage); } }