//tcp-сервер Data ------------------------------------------------------ public bool ListenDataTcp(Startmode mode) { bool res = false; switch (mode) { case Startmode.Setup: TcpListener server = null; TcpAddress address = Agent.Agency.Context.GetTcpAddress(Agent); if (address != null) { try { server = new TcpListener(IPAddress.Parse(address.Address), address.Port); // запуск слушателя server.Start(); server.BeginAcceptTcpClient(receiveStationData, server); var ipen = server.LocalEndpoint as IPEndPoint; WriteLog($"{Agent.Name}: агент приступил к работе по адресу {ipen.Address}:{ipen.Port}"); res = true; } catch (Exception e) { WriteLog($"{Agent.Name}: агент не запустился с сообщением: {e.Message}"); } //if (server != null) SaveObject.Enqueue(server); SaveObject.Enqueue(address); } else //адрес получить не удалость { WriteLog($"{Agent.Name}: не удалось получить tcp-адрес, завершаю работу."); } break; case Startmode.Main: res = true; break; case Startmode.Finally: server = SaveObject.Dequeue() as TcpListener; address = SaveObject.Dequeue() as TcpAddress; if (server != null) { server.Stop(); Agent.Agency.Context.FreeTcpAddress(address); } //очистка очереди SaveObject.Clear(); break; default: res = true; break; } return(res); }
//end tcp-сервер Command--------------------------------------------------- //Web-сервер Command ----------------------------------------------------- public bool ListenCommandHttp(Startmode mode) { bool res = false; var context = Agent.Agency.Context; switch (mode) { case Startmode.Setup: WebServer server = null; TcpAddress addr = context.GetTcpAddress(Agent); if (addr != null) { try { //server = new WebServer(new List<string> { "http://192.168.10.100:33330/" }, WriteLog); server = new WebServer(new List <string> { $"http://{addr.Address}:{addr.Port}/" }, WriteLog); //настройка интерпретатора server.SetInterpretator(parsing_command); //получение данных о зарегистрированных пользователях server.AddUsersFromConfig(context.AppSettings); //настройка ответа на GET-запрос var fpath = context.AppSettings["get_method_file"]; server.SetResponseToGetRequest(fpath); // запуск слушателя server.Start(); res = true; } catch (Exception e) { WriteLog($"{Agent.Name}: При настройке окружения агента произошла ошибка: {e.Message}"); } if (server != null) { SaveObject.Enqueue(server); SaveObject.Enqueue(addr); } } else //адрес получить не удалость { WriteLog($"{Agent.Name}: не удалось получить tcp-адрес, завершаю работу."); } break; case Startmode.Main: break; case Startmode.Finally: server = SaveObject.Dequeue() as WebServer; addr = SaveObject.Dequeue() as TcpAddress; if (server != null) { server.Stop(); context.FreeTcpAddress(addr); //освобождаем tcp-адрес } //очистка очереди SaveObject.Clear(); break; default: res = true; break; } return(res); }