private PackageViaWireless ReadData(NetworkStream stream)
        {
            StringBuilder data;
            byte[] buffer;
            string head;
            PackageViaWireless package = new PackageViaWireless();
            data = new StringBuilder();
            buffer = new byte[256];
            do
                {
                int streamLength = stream.Read(buffer, 0, buffer.Length);
                data.Append(Encoding.GetEncoding(1251).GetString(buffer, 0, streamLength));
                } while ( stream.DataAvailable );

            if ( !package.SetPackage(data.ToString(), out head) )
                {
                client.Close();
                package = null;
                }
            return package;
        }
Ejemplo n.º 2
0
        public void Start(object state)
        {
            Console.Write("Устройство '{0}' подключено!", IPAddress);

            #region Defining variables

            string StorekeeperQueryHead = "";

            #endregion

            while (true)
                {
                #region Checking topicality of connection, closing the thread if connection dead

                if (!TCPClient.Connected)
                    {
                    CloseChannels();

                    return;
                    }

                #endregion

                #region Reading storekeeper query from network stream

                string StorekeeperQuery;

                if (PackageViaWireless.isCompletelyPackage(StorekeeperQueryHead))
                    {
                    StorekeeperQuery = StorekeeperQueryHead;
                    }
                else
                    {
                    StorekeeperQuery = ReadStream(StorekeeperQueryHead);

                    if (StorekeeperQuery == null)
                        {
                        continue;
                        }
                    }
                #endregion

                PackageViaWireless package = new PackageViaWireless();
                if (!package.SetPackage(StorekeeperQuery, out StorekeeperQueryHead))
                    {
                    // We have recived package with wrong data format or uncompletely package
                    continue;
                    }

                object[] ResultParameters = Aramis.Net.PackageConvertation.GetPatametersFromStr(package.Parameters);

                if (package.QueryName == PACKAGE_CONFIRMATION_NAME)
                    {
                    string packageId = ResultParameters[0] as string;
                    bool delivered = (bool)(ResultParameters[1]);

                    Trace.WriteLine(string.Format("Pack id: {0};\tquery = {1};\t{2}", packageId, PACKAGE_CONFIRMATION_NAME, DateTime.Now.ToString("mm:ss")));

                    if (packageId.Equals(lastPackageId))
                        {
                        if (delivered)
                            {
                            waitForConfirmationReply = false;
                            }
                        else
                            {
                            RepeateLastPackage();
                            }
                        }
                    else
                        {
                        // если пакет потерян, то его нельзя переслать
                        waitForConfirmationReply = false;
                        }

                    continue;
                    }

                Trace.WriteLine(string.Format("Pack id: {0};\tquery = {1};\t{2}", package.PackageID, package.QueryName, DateTime.Now.ToString("mm:ss")));

                CurrentUserId = package.ClientCode;
                object[] resultArray = receiveMessage(package.QueryName, ResultParameters, package.ClientCode);

                string resultStr = Aramis.Net.PackageConvertation.GetStrPatametersFromArray(resultArray);
                package.DefineQueryAndParams("Answer", resultStr);
                WritePackage(package);
                //#region Handling via 1C server

                //bool registration = false;
                //PackageViaWireless package = new PackageViaWireless();
                //if (!package.SetPackage(StorekeeperQuery, out StorekeeperQueryHead))
                //{
                //    // We have recived package with wrong data format or uncompletely package
                //    continue;
                //}

                //if (package.QueryName == "PingReply")
                //{
                //    double delay = ((Double)(DateTime.Now.Ticks - Convert.ToInt64(PackageConvertation.GetPatametersFromStr(package.Parameters)[0]))) / 10000000;
                //    package.Parameters = "3" + System.Math.Round(delay, 2).ToString();
                //    WriteStream(package.GetPackage());
                //    lastTimePingSent = DateTime.Now.Ticks;
                //    PingSent = false;
                //    continue;
                //}

                //#region Playing
                //if (package.QueryName == "PageDown")
                //{
                //    KeyEmulation.PressKey(System.Windows.Forms.Keys.PageDown);
                //    continue;
                //}

                //if (package.QueryName == "PageUp")
                //{
                //    KeyEmulation.PressKey(System.Windows.Forms.Keys.PageUp);
                //    continue;
                //}

                //if (package.QueryName == "MouseMove")
                //{
                //    object[] XYParameters = PackageConvertation.GetPatametersFromStr(package.Parameters);
                //    System.Drawing.Point P = System.Windows.Forms.Cursor.Position;
                //    P.X += 3 * Convert.ToInt32(XYParameters[0]);
                //    P.Y += 3 * Convert.ToInt32(XYParameters[1]);
                //    System.Windows.Forms.Cursor.Position = P;
                //    continue;
                //}

                //if (package.QueryName == "DoMouseClick")
                //{
                //    DoMouseClick();
                //    continue;
                //}

                //#endregion

                //if (Updating)
                //{
                //    if (package.QueryName == "FileAccepted")
                //    {
                //        // Файл принят успешно
                //        InformAboutUpdateComplete(GetClientIP());
                //        Updating = false;
                //        Console.WriteLine(String.Format("Update has recived by machine: [{0}] ", IPAddress));
                //        continue;
                //    }
                //}

                //// Console.WriteLine(String.Format("id: {0}\t{1}", package.PackageID, DateTime.Now.ToString()));
                //Trace1C.WriteParameters(package.ClientCode.ToString(), package.QueryName, package.Parameters.Replace("\r", "^"));
                //if (package.QueryName == "ConnectionRecovery")
                //{
                //    ClientCode = Convert.ToString(package.ClientCode);
                //    continue;
                //}

                //if (package.QueryName == "BreakConnection")
                //{
                //    Console.WriteLine(String.Format("Machine [{0}] disconnected", IPAddress));
                //    CloseChannels();
                //    return;
                //}

                //if (package.QueryName == "Message")
                //{
                //    int MessageId = Convert.ToInt32(package.Parameters);
                //    Server1CAgent.QueryTo1CServer(ClientCode, "SetMessageStatus", "2" + MessageId.ToString() + "\r22");
                //    continue;

                //registration = package.QueryName == "Registration";
                //string Result = Server1CAgent.QueryTo1CServer(package.ClientCode.ToString(), package.QueryName, package.Parameters);
                //if (result == null)
                //{
                //    package.DefineQueryAndParams("Answer", "#ERROR:1C_AGENT_DISABLE#");
                //    WriteStream(package.GetPackage());
                //    continue;
                //}

                //if (package.QueryName == "UserGetOut")
                //{
                //    continue;
                //}

                //if (package.QueryName == "PrintLabel" || package.QueryName == "RepeatPrinting" || package.QueryName == "SlittingManagement")
                //{
                //    int StartIndex = Result.IndexOf("P#$$");
                //    // P#$$ - чтобы не возникло никаких случайностей, защита от совпадения с другой строкой
                //    if (StartIndex != -1)
                //    {
                //        string PrintingParameters = Result.Substring(StartIndex + 4);
                //        Result = Result.Substring(0, StartIndex);
                //        if (PrintingParameters.Length > 0)
                //        {
                //            System.Diagnostics.Process.Start("ftp", PrintingParameters);
                //        }
                //    }
                //}

                //if (registration)
                //{
                //    object[] ResultParameters = PackageConvertation.GetPatametersFromStr(Result);
                //    if ((int)ResultParameters[0] == 0)
                //    {
                //        this.ClientCode = ((int)ResultParameters[1]).ToString();
                //    }
                //}
                //package.DefineQueryAndParams("Answer", Result);
                ////Console.WriteLine("{1} - StorekeeperQueryHead.Length = {0}", StorekeeperQueryHead.Length, DateTime.Now.ToString());

                //#endregion
                }
        }
Ejemplo n.º 3
0
        public void Start(object state)
        {
            Console.Write("Устройство '{0}' подключено!", IPAddress);

            #region Defining variables

            string StorekeeperQueryHead = "";

            #endregion

            while (true)
            {
                #region Checking topicality of connection, closing the thread if connection dead

                if (!TCPClient.Connected)
                {
                    CloseChannels();

                    return;
                }

                #endregion

                #region Reading storekeeper query from network stream

                string StorekeeperQuery;

                if (PackageViaWireless.isCompletelyPackage(StorekeeperQueryHead))
                {
                    StorekeeperQuery = StorekeeperQueryHead;
                }
                else
                {
                    StorekeeperQuery = ReadStream(StorekeeperQueryHead);

                    if (StorekeeperQuery == null)
                    {
                        continue;
                    }
                }
                #endregion

                PackageViaWireless package = new PackageViaWireless();
                if (!package.SetPackage(StorekeeperQuery, out StorekeeperQueryHead))
                {
                    // We have recived package with wrong data format or uncompletely package
                    continue;
                }


                object[] ResultParameters = Aramis.Net.PackageConvertation.GetPatametersFromStr(package.Parameters);

                if (package.QueryName == PACKAGE_CONFIRMATION_NAME)
                {
                    string packageId = ResultParameters[0] as string;
                    bool   delivered = (bool)(ResultParameters[1]);

                    Trace.WriteLine(string.Format("Pack id: {0};\tquery = {1};\t{2}", packageId, PACKAGE_CONFIRMATION_NAME, DateTime.Now.ToString("mm:ss")));

                    if (packageId.Equals(lastPackageId))
                    {
                        if (delivered)
                        {
                            waitForConfirmationReply = false;
                        }
                        else
                        {
                            RepeateLastPackage();
                        }
                    }
                    else
                    {
                        // если пакет потерян, то его нельзя переслать
                        waitForConfirmationReply = false;
                    }

                    continue;
                }

                Trace.WriteLine(string.Format("Pack id: {0};\tquery = {1};\t{2}", package.PackageID, package.QueryName, DateTime.Now.ToString("mm:ss")));

                CurrentUserId = package.ClientCode;
                object[] resultArray = receiveMessage(package.QueryName, ResultParameters, package.ClientCode);

                string resultStr = Aramis.Net.PackageConvertation.GetStrPatametersFromArray(resultArray);
                package.DefineQueryAndParams("Answer", resultStr);
                WritePackage(package);
                //#region Handling via 1C server

                //bool registration = false;
                //PackageViaWireless package = new PackageViaWireless();
                //if (!package.SetPackage(StorekeeperQuery, out StorekeeperQueryHead))
                //{
                //    // We have recived package with wrong data format or uncompletely package
                //    continue;
                //}

                //if (package.QueryName == "PingReply")
                //{
                //    double delay = ((Double)(DateTime.Now.Ticks - Convert.ToInt64(PackageConvertation.GetPatametersFromStr(package.Parameters)[0]))) / 10000000;
                //    package.Parameters = "3" + System.Math.Round(delay, 2).ToString();
                //    WriteStream(package.GetPackage());
                //    lastTimePingSent = DateTime.Now.Ticks;
                //    PingSent = false;
                //    continue;
                //}

                //#region Playing
                //if (package.QueryName == "PageDown")
                //{
                //    KeyEmulation.PressKey(System.Windows.Forms.Keys.PageDown);
                //    continue;
                //}

                //if (package.QueryName == "PageUp")
                //{
                //    KeyEmulation.PressKey(System.Windows.Forms.Keys.PageUp);
                //    continue;
                //}

                //if (package.QueryName == "MouseMove")
                //{
                //    object[] XYParameters = PackageConvertation.GetPatametersFromStr(package.Parameters);
                //    System.Drawing.Point P = System.Windows.Forms.Cursor.Position;
                //    P.X += 3 * Convert.ToInt32(XYParameters[0]);
                //    P.Y += 3 * Convert.ToInt32(XYParameters[1]);
                //    System.Windows.Forms.Cursor.Position = P;
                //    continue;
                //}

                //if (package.QueryName == "DoMouseClick")
                //{
                //    DoMouseClick();
                //    continue;
                //}



                //#endregion

                //if (Updating)
                //{
                //    if (package.QueryName == "FileAccepted")
                //    {
                //        // Файл принят успешно
                //        InformAboutUpdateComplete(GetClientIP());
                //        Updating = false;
                //        Console.WriteLine(String.Format("Update has recived by machine: [{0}] ", IPAddress));
                //        continue;
                //    }
                //}

                //// Console.WriteLine(String.Format("id: {0}\t{1}", package.PackageID, DateTime.Now.ToString()));
                //Trace1C.WriteParameters(package.ClientCode.ToString(), package.QueryName, package.Parameters.Replace("\r", "^"));
                //if (package.QueryName == "ConnectionRecovery")
                //{
                //    ClientCode = Convert.ToString(package.ClientCode);
                //    continue;
                //}

                //if (package.QueryName == "BreakConnection")
                //{
                //    Console.WriteLine(String.Format("Machine [{0}] disconnected", IPAddress));
                //    CloseChannels();
                //    return;
                //}

                //if (package.QueryName == "Message")
                //{
                //    int MessageId = Convert.ToInt32(package.Parameters);
                //    Server1CAgent.QueryTo1CServer(ClientCode, "SetMessageStatus", "2" + MessageId.ToString() + "\r22");
                //    continue;

                //registration = package.QueryName == "Registration";
                //string Result = Server1CAgent.QueryTo1CServer(package.ClientCode.ToString(), package.QueryName, package.Parameters);
                //if (result == null)
                //{
                //    package.DefineQueryAndParams("Answer", "#ERROR:1C_AGENT_DISABLE#");
                //    WriteStream(package.GetPackage());
                //    continue;
                //}

                //if (package.QueryName == "UserGetOut")
                //{
                //    continue;
                //}

                //if (package.QueryName == "PrintLabel" || package.QueryName == "RepeatPrinting" || package.QueryName == "SlittingManagement")
                //{
                //    int StartIndex = Result.IndexOf("P#$$");
                //    // P#$$ - чтобы не возникло никаких случайностей, защита от совпадения с другой строкой
                //    if (StartIndex != -1)
                //    {
                //        string PrintingParameters = Result.Substring(StartIndex + 4);
                //        Result = Result.Substring(0, StartIndex);
                //        if (PrintingParameters.Length > 0)
                //        {
                //            System.Diagnostics.Process.Start("ftp", PrintingParameters);
                //        }
                //    }
                //}

                //if (registration)
                //{
                //    object[] ResultParameters = PackageConvertation.GetPatametersFromStr(Result);
                //    if ((int)ResultParameters[0] == 0)
                //    {
                //        this.ClientCode = ((int)ResultParameters[1]).ToString();
                //    }
                //}
                //package.DefineQueryAndParams("Answer", Result);
                ////Console.WriteLine("{1} - StorekeeperQueryHead.Length = {0}", StorekeeperQueryHead.Length, DateTime.Now.ToString());


                //#endregion
            }
        }