コード例 #1
0
        //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);
        }
コード例 #2
0
        //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);
        }