Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AsyncService
- {
- private static Logger logger = LogManager.GetCurrentClassLogger();
- private IPAddress listenerAddress;
- private int listenerPort;
- private Func<string, string> respond;
- public AsyncService(IPAddress address, int port, Func<string, string> func)
- {
- listenerAddress = address;
- listenerPort = port;
- respond = func;
- }
- public async void Run()
- {
- TcpListener listener = new TcpListener(listenerAddress, listenerPort);
- listener.Server.ReceiveTimeout = 5000;
- listener.Server.ReceiveBufferSize = 65536;
- listener.Start();
- logger.Info(String.Format("Сервер запущен на {0}:{1}", listenerAddress, listenerPort));
- while (true)
- {
- try
- {
- TcpClient tcpClient = await listener.AcceptTcpClientAsync();
- Task t = Process(tcpClient);
- await t;
- }
- catch (Exception ex)
- {
- logger.Error(ex);
- }
- }
- }
- private async Task Process(TcpClient tcpClient)
- {
- string clientEndPoint = tcpClient.Client.RemoteEndPoint.ToString();
- logger.Info("Подключение с адреса " + clientEndPoint);
- try
- {
- string request;
- byte[] data = new byte[tcpClient.ReceiveBufferSize];
- using (NetworkStream stream = tcpClient.GetStream())
- {
- using (MemoryStream ms = new MemoryStream())
- {
- int numBytesRead;
- while ((numBytesRead = await stream.ReadAsync(data, 0, data.Length)) > 0)
- {
- ms.Write(data, 0, numBytesRead);
- }
- request = Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length);
- }
- string response = respond.Invoke(request);
- logger.Info("Отправка ответа");
- logger.Info(response + "\r\n");
- data = Encoding.UTF8.GetBytes(response);
- await stream.WriteAsync(data, 0, data.Length);
- }
- }
- catch (Exception ex)
- {
- logger.Error(ex);
- }
- finally
- {
- if (tcpClient.Connected)
- tcpClient.Close();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement