Exemplo n.º 1
0
        private async Task RunAsync(CancellationToken cancellationToken)
        {
            using (var client = new TcpClient())
            {
                _logger.LogDebug("Connecting to tcp server on port {port}", _port);
                await client.ConnectAsync(IPAddress.Loopback, _port);

                _logger.LogDebug("Connected");

                using (var stream = client.GetStream())
                    using (var reader = new BinaryReader(stream))
                        using (var writer = new BinaryWriter(stream))
                        {
                            while (!cancellationToken.IsCancellationRequested)
                            {
                                while (!stream.DataAvailable)
                                {
                                    if (!client.Client.IsConnected())
                                    {
                                        OnDisconnected?.Invoke(this, EventArgs.Empty);
                                        return;
                                    }
                                    await Task.Delay(10, cancellationToken);
                                }

                                // Request
                                _logger.LogDebug("Received reqeust from client");
                                var fileChange = FileChangeSerializer.Deserialize(reader);
                                var cakeScript = CakeScript.Empty;

                                try
                                {
                                    cakeScript = _service.Generate(fileChange);
                                }
                                catch (Exception e)
                                {
                                    _logger.LogError(0, e, "Unhandled Exception while processing request.");
                                }

                                // Response
                                _logger.LogDebug("Sending response to client");
                                CakeScriptSerializer.Serialize(writer, cakeScript);
                                writer.Flush();
                            }
                        }
            }
        }
Exemplo n.º 2
0
        public CakeScript Generate(FileChange fileChange)
        {
            _initializedEvent.WaitOne();

            lock (_sendReceiveLock)
            {
                // Send
                _logger.LogDebug("Sending request to server");
                FileChangeSerializer.Serialize(_writer, fileChange, Constants.Protocol.Latest);
                _writer.Flush();

                while (!_stream.DataAvailable)
                {
                    Task.Delay(10).Wait();
                }

                // Receive
                _logger.LogDebug("Received response from server");
                return(CakeScriptSerializer.Deserialize(_reader));
            }
        }