Ejemplo n.º 1
0
        ///Обработка запроса от клиента HTTP.В Данном случае у нас сервер приложений является клиентом.
        ///Так как на каждом клиенте запускается сервер HTTP.
        private static void ServerProcessHTTP(object o)
        {
            try
            {
                var context = o as HttpListenerContext;
                HttpListenerRequest  request  = context.Request;
                HttpListenerResponse response = context.Response;

                CommandCode commandCode;
                string      ConnectionGUID = "";
                string      FileName       = "";
                string      RequestStrLog  = "";
                string      ResponseStr    = "";
                string      RequestStr     = "";
                if (!sys.GetComandCode(request.RawUrl, out commandCode, ref ConnectionGUID, ref FileName))
                {
                    return;
                }

                ResponseStr = "Success";
                //Если сервер прислал файл, то сохраняем в темповой папке.
                if (FileName != "")
                {
                    sys.GetRequestFile(context.Request.ContentEncoding, sys.GetBoundary(context.Request.ContentType), context.Request.InputStream, FileName);
                    RequestStrLog = sys.GetDateTimeNow() + ": Запись файла: " + FileName + Var.CR;
                    //action = () => tbLogQuery.AppendText(RequestStrLog);
                    //tbLogServer.Invoke(action);
                }
                else
                {
                    //RequestStr - это тело запроса от клиента.
                    RequestStr    = sys.GetRequestString2(context.Request.ContentEncoding, sys.GetBoundary(context.Request.ContentType), context.Request.InputStream);
                    RequestStrLog = sys.GetDateTimeNow() + ": " + RequestStr.Left(200) + "..." + Var.CR;
                    RequestStrLog = RequestStrLog.Replace(Var.CR, "") + Var.CR;
                    //ResponseStr = "Success"; //GetServerResponse(CommandCode, RequestStr);
                    //string ResponseStr = "asd123нгшщзхъzxc";//Convert.ToBase64String(fileBuffer);
                }

                //Проверка гуида клиента. Верное ли значение на сервере приложений.
                if (commandCode == CommandCode.S205)
                {
                    ResponseStr = (Var.con.ConnectionGUID == RequestStr) ? "GUID Ok." : "GUID mismatch.";
                }

                byte[] buffer = System.Text.Encoding.Default.GetBytes(ResponseStr); //UTF8
                response.ContentLength64 = buffer.Length;
                System.IO.Stream output = response.OutputStream;
                output.Write(buffer, 0, buffer.Length);
                output.Close();

                if (commandCode == CommandCode.S201)
                {
                    ServerWork.ServerStop();
                    Environment.Exit(0);
                }

                //FormMainLocal.TopMost = true;
                if (commandCode == CommandCode.S202)
                {
                    sys.SM(RequestStr, MessageType.Error, "Сообщение от администратора");
                }
                if (commandCode == CommandCode.S203)
                {
                    sys.SM(RequestStr, MessageType.Information, "Сообщение от администратора");
                }
                //if (commandCode == CommandCode.S204) sys.SM(RequestStr, MessageType.Question, "Вопрос от администратора");  //Пока не работает.
            } catch (Exception ex)
            {
                //В случае другой ошибки, выводим что это за ошибка.
                sys.SM("Ошибка " + ErrorCode.C119 + " локального сервера: " + ex.Message);
                //Environment.Exit(0); //работу не продолжаем!
            }
        }
Ejemplo n.º 2
0
        //[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
        private static void Main(string[] args)
        {
            /*<configuration>
             * <runtime>
             * <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
             * <dependentAssembly>
             * <assemblyIdentity name="VendorAssembly"  culture="neutral" publicKeyToken="307041694a995978"/>
             * <codeBase version="1.1.1.1" href="FILE://*****:*****@"C:\000_Тravin\Дизайнер SD\FBA\Library\");
            //AppDomainSetup m_Setup;
            //m_Setup = new AppDomainSetup();
            //m_Setup.PrivateBinPathProbe = "";
            //m_Setup.PrivateBinPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;
            //m_Setup.LoaderOptimization;
            //Directory.SetCurrentDirectory(@"C:\000_Тravin\Дизайнер SD\FBA\Library\"); // второй backslash перед Алекс

            //"System.AppDomain.AppendPrivatePath(string)" является устаревшим: "AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202" (CS0618) - C:\000_Тravin\Дизайнер SD\FBA\ClientApp\Program.cs:43,4
            Var.SystemName = "ClientApp";

            //Установка соединения с локальной базой SQLIte. Без неё не работаем.
            sys.ConnectLocal();
            //sys.ConnectLocal();
            //sys.ConnectRemote();
            if (Var.Args.Length < 2)
            {
                sys.ConnectRemote();
            }
            else
            {
                sys.ConnectParam();
            }
            //Если соединение с сервером приложений, то получаем локальный порт, и стартуем локальный сервер HTTP.
            if (!Var.con.ConnectionDirect)
            {
                Var.LocalServerPort = sys.GetServerLocalPort();
                ServerWork.ServerStart(Var.FormMainObj);
            }

            //Запуск главной формы.
            Var.FormMainObj.ShowInTaskbar = true; //Даже если форма настроена на то чтобы скрываться, все равно показываем.
            System.Windows.Forms.Application.Run(Var.FormMainObj);


            //Остановка локального сервера.
            if (!Var.con.ConnectionDirect)
            {
                sys.SendEventClientClose();
                ServerWork.ServerStop();
            }
        }