private void HandleStartBox(IAsyncResult res) { Logger.Info("start handling start box request"); StartAccept(_start, HandleStartBox); //listen for new connections again try { var client = _start.EndAcceptTcpClient(res); //proceed Logger.Debug("Handle the start box stream"); var clientStream = client.GetStream(); var data = KeyblockCall.Read(clientStream); Logger.Debug($"Read {data.Length} bytes from the start box stream"); File.WriteAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.request"), data); Logger.Info("Connect to remote to handle start box request"); var remote = new TcpClient(); remote.Connect(_fallbackKeyServer, 12686); var remoteStream = remote.GetStream(); remoteStream.Write(data, 0, data.Length); var buff = new byte[2048]; var size = remoteStream.Read(buff, 0, buff.Length); File.WriteAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.response"), buff.Take(size).ToArray()); var response = File.ReadAllBytes(Path.Combine(_appDataFolder, "KeyblockMessages", "12686.response")); Logger.Info($"Write {response.Length} bytes to the start box stream"); clientStream.Write(response, 0, response.Length); clientStream.Flush(); client.Close(); } catch (Exception ex) { if (!_stopping) { Logger.Warn($"Something went wrong when handling start box request: {ex.Message}"); } } }