Ejemplo n.º 1
0
        private void WriteStream(Byte[] packageData, string packageId)
        {
            var parameters = Aramis.Net.PackageConvertation.GetStrPatametersFromArray(new object[] { packageId });
            var packageOfDeliveryConfirmation = new PackageViaWireless(0, true);

            packageOfDeliveryConfirmation.DefineQueryAndParams(PACKAGE_CONFIRMATION_NAME, parameters);

            lock (this)
            {
                packageConfirmation = packageOfDeliveryConfirmation.GetPackage();

                lastPackage           = packageData;
                lastPackageId         = packageId;
                actualLastPackageTime = DateTime.Now;

                if (!TCPStream.CanWrite)
                {
                    CloseChannels();
                    return;
                }

                try
                {
                    TCPStream.Write(packageData, 0, packageData.Length);
                }
                catch
                {
                    CloseChannels();
                    return;
                }
            }
            waitForConfirmationReply = true;
        }
Ejemplo n.º 2
0
 public PackageViaWireless CreateAlertAboutFile()
 {
     PackageViaWireless alertPackage = new PackageViaWireless();
     string parameters = String.Format("3{0}\r2{1}", FileName, FileSize.ToString());
     alertPackage.DefineQueryAndParams("FileTransmit", parameters);
     return alertPackage;
 }
Ejemplo n.º 3
0
        public PackageViaWireless CreateAlertAboutFile()
        {
            PackageViaWireless alertPackage = new PackageViaWireless();
            string             parameters   = String.Format("3{0}\r2{1}", FileName, FileSize.ToString());

            alertPackage.DefineQueryAndParams("FileTransmit", parameters);
            return(alertPackage);
        }
        internal object[] PerformQuery(string query, params object[] parameters)
        {
            PackageViaWireless package = new PackageViaWireless();
            try
                {
                client = new TcpClient(Settings.Default.ServerIPAddress, SERVER_PORT);
                NetworkStream stream = client.GetStream();

                if ( !Connected(stream))
                    {
                    return null;
                    }

                package.DefineQueryAndParams(query, PackageConvertation.GetStrPatametersFromArray(parameters));
                byte[] buffer = package.GetPackage();
                stream.Write(buffer, 0, buffer.Length);
                package = ReadData(stream);

                if ( package.QueryName == "GetSMS" )
                    {
                    PackageViaWireless okPackage = new PackageViaWireless();
                    okPackage.DefineQueryAndParams("OK", PackageConvertation.GetStrPatametersFromArray(new object[0]));
                    buffer = okPackage.GetPackage();
                    stream.Write(buffer, 0, buffer.Length);
                    }
                }
            catch (Exception exp)
                {
                if ( OnError != null )
                    {
                    OnError(exp.ToString());
                    }
                }
            finally
                {
                if ( client != null )
                    {
                    client.Close();
                    }
                }
            return package == null || package.Parameters == null ? null :PackageConvertation.GetPatametersFromStr(package.Parameters);
        }
Ejemplo n.º 5
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
                }
        }
        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.º 7
0
        public object[] PerformQuery(string QueryName, params object[] Parameters)
        {
            PackageViaWireless Package = new PackageViaWireless(0, true);
            Package.DefineQueryAndParams(QueryName, PackageConvertation.GetStrPatametersFromArray(Parameters));
            Package.ClientCode = User;
            ConnectionAgent.WaitingPackageID = Package.PackageID;
            ConnectionAgent.Executed = false;
            MainForm.ShowQueryWait();
            if (ConnectionAgent.SendPackage(Package.GetPackage()))
            {

                while (!ConnectionAgent.RequestReady & ConnectionAgent.OnLine)
                {
                    Thread.Sleep(300);
                }

                MainForm.ShowQueryComplated();

                if (ConnectionAgent.Package == null || !ConnectionAgent.Executed)
                {

                    Process.ShowMessage("Пропала связь с сервером!");
                    return null;
                }
                if (ConnectionAgent.Package.Parameters == "#ERROR:1C_AGENT_DISABLE#")
                {
                    ConnectionAgent.Package.Parameters = string.Empty;
                    ConnectionAgent.RequestReady = false;
                    Process.ShowMessage("1С-агент неактивен. Обратитесь к оператору!");
                    return null;
                }
                object[] result = PackageConvertation.GetPatametersFromStr(ConnectionAgent.Package.Parameters);

                ConnectionAgent.RequestReady = false;

                if (result.Length == 0)
                {
                    return null;
                }
                if (result.GetType() == typeof(object[]) && result.Length == 1 && result[0] == null)
                    return null;
                return result;
            }
            return null;
        }
Ejemplo n.º 8
0
        private void ReadPackages()
        {
            #region Define local variables

            string StorekeeperQuery = "", StorekeeperQueryHead = "";

            //Byte[] emptyData = System.Text.Encoding.GetEncoding(1251).GetBytes("");

            //int streamLength;

            #endregion

            while (wifiEnabled)
                {
                #region Getting package

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

                Package = null;
                if (StorekeeperQuery == null) return;

                StorekeeperQuery = StorekeeperQueryHead + StorekeeperQuery;
                WriteToFile(" << Read Query [" + StorekeeperQuery + "]", false);

                if (!PackageViaWireless.isCompletelyPackage(StorekeeperQuery)) continue;

                Package = new PackageViaWireless(StorekeeperQuery, out StorekeeperQueryHead);

                StorekeeperQuery = "";

                #endregion

                #region Pinging server

                if (Package.QueryName == "Ping")
                    {
                    Package.QueryName = "PingReply";
                    SendPackage(Package.GetPackage());
                    continue;
                    }

                if (Package.QueryName == "PingReply")
                    {

                    WriteToFile("? ShowPingResult");
                    DataRepresent.ShowPingValue(PackageConvertation.GetPatametersFromStr(Package.Parameters)[0] as string);
                    //Client.MainForm.ShowPingResult(PackageConvertation.GetPatametersFromStr(Package.Parameters)[0] as string);
                    WriteToFile("OK ShowPingResult");

                    continue;
                    }

                #endregion

                if (Package.QueryName == "KeyPressing")
                    {
                    SendKeyCode = (int)PackageConvertation.GetPatametersFromStr(Package.Parameters)[0];
                    var CallTimer = new CallTimer(SendKey, 1, true);
                    continue;
                    }

                if (Package.QueryName == "BarcodeEvent")
                    {
                    SendBarcode = PackageConvertation.GetPatametersFromStr(Package.Parameters)[0] as string;
                    var CallTimer = new CallTimer(SendKey, 1, true);
                    continue;
                    }

                if (Package.QueryName == "TimeSynchronization")
                    {
                    SetTime(PackageConvertation.GetPatametersFromStr(Package.Parameters)[0] as string);
                    continue;
                    }

                if (Package.QueryName == "FileTransmit")
                    {
                    object[] Params = PackageConvertation.GetPatametersFromStr(Package.Parameters);
                    StorekeeperQueryHead = AcceptFile(Params[0] as string, (int)Params[1], StorekeeperQueryHead, Convert.ToBoolean(Params[2]));
                    continue;
                    }

                #region Message handling

                if (Package.QueryName == "Message")
                    {
                    object[] Parameters = PackageConvertation.GetPatametersFromStr(Package.Parameters);
                    System.Windows.Forms.MessageBox.Show(Parameters[0] as string);

                    // В параметры записывается только ID, текс сообщения уже не нужен
                    Package.Parameters = ((int)Parameters[1]).ToString();
                    SendPackage(Package.GetPackage());
                    continue;
                    }
                #endregion

                #region PackageHandling
                if (Package.PackageID != WaitingPackageID) continue;
                Executed = true;
                RequestReady = true;

                while (RequestReady)
                    {
                    Thread.Sleep(100);
                    }
                #endregion
                }
        }
Ejemplo n.º 9
0
        private string ReadStream(string line)
        {
            Byte[] recivedData = new Byte[1024];
            Byte[] emptyData   = Encoding.GetEncoding(1251).GetBytes("");

            try
            {
                if (TCPClient.Available > 0)
                {
                    StringBuilder SB = new StringBuilder();
                    while (TCPClient.Available > 0)
                    {
                        int streamLength = TCPStream.Read(recivedData, 0, recivedData.Length);
                        SB.Append(Encoding.GetEncoding(1251).GetString(recivedData, 0, streamLength));
                    }
                    string sbResult = SB.ToString();

                    if (!string.IsNullOrEmpty(line))
                    {
                        return(string.Concat(line, sbResult));
                    }

                    return(sbResult);
                }
                else if (waitForConfirmationReply)
                {
                    lock (this)
                    {
                        int milisecondsElapsed = (int)((TimeSpan)(DateTime.Now - actualLastPackageTime)).TotalMilliseconds;
                        if (milisecondsElapsed > 500)
                        {
                            //Trace.WriteLine(string.Format("WaitForConfirmationReply package.PackageID = {0};\t{1}",
                            //    lastPackageId, DateTime.Now));

                            TCPStream.Write(packageConfirmation, 0, packageConfirmation.Length);
                            actualLastPackageTime = DateTime.Now;
                        }
                    }
                }

                lock (this)
                {
                    TCPStream.Write(emptyData, 0, emptyData.Length);
                }
                // if anybody comment next string, CPU will die with five or more client connections

                if (NeedToUpdate)
                {
                    SendUpdate();
                    return(null);
                }

                string packageId;
                long   MSecDiff = (DateTime.Now.Ticks - lastTimePingSent) / 10000;
                if (
                    //false &&
                    (NeedToPing && !PingSent && MSecDiff >= 700))
                {
                    // TestString length is 100 bytes
                    const string TestString = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";

                    StringBuilder sb = new StringBuilder(TestString);
                    for (int i = 0; i < 0; i++)
                    {
                        sb.Append(TestString);
                    }


                    WriteStream(PackageViaWireless.BuildPackage(0, "Ping", Aramis.Net.PackageConvertation.GetStrPatametersFromArray(DateTime.Now.Ticks.ToString(), sb.ToString()), false, out packageId), packageId);
                    PingSent = true;
                    return(null);
                }

                //MSecDiff = (DateTime.Now.Ticks - lastTimeMessageCheck) / 10000;
                if (ClientCode == "")
                {       // Еще не известно для кого проверять наличие сообщения
                    Byte[] answer;
                    if (NewConnection)
                    {
                        answer = PackageViaWireless.BuildPackage(0, "TimeSynchronization", Aramis.Net.PackageConvertation.GetStrPatametersFromArray(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")), false, out packageId);
                        // Sending answer
                        WriteStream(answer, packageId);

                        NewConnection = false;
                    }
                    if (KeyPress != 0)
                    {
                        answer = PackageViaWireless.BuildPackage(0, "KeyPressing", Aramis.Net.PackageConvertation.GetStrPatametersFromArray(KeyPress), false, out packageId);
                        WriteStream(answer, packageId);
                        KeyPress = 0;
                    }

                    if (SendBarcode != null)
                    {
                        answer = PackageViaWireless.BuildPackage(0, "BarcodeEvent", Aramis.Net.PackageConvertation.GetStrPatametersFromArray(SendBarcode), false, out packageId);
                        WriteStream(answer, packageId);
                        SendBarcode = null;
                    }

                    Thread.Sleep(100);
                    return(null);
                }
            }
            catch (Exception exp)
            {     /* I just was unable to find other way for inform TcpClient about connection death.
                   *    /* Without attempt of writing empty string to stream the property "Available" return
                   *    /* wrong value, for example "TRUE" when client went to dining room :) */
                Console.Write("Disconnecting for machine [ {0} ], thread {1}. Exp:{2}", IPAddress, Thread.CurrentThread.GetHashCode(), exp.Message);
                CloseChannels();
                return("");
            }
        }
Ejemplo n.º 10
0
        public object[] PerformQuery(string QueryName, params object[] Parameters)
        {
            Current.LastQueryIsSuccessfull = false;
            if (!Current.OnLine && Current.MainForm.IsMainThread)
                {
                //"Нет подключения к серверу".Warning();
                return null;
                }

            PackageViaWireless Package = new PackageViaWireless(0, true);
            Package.DefineQueryAndParams(QueryName, PackageConvertation.GetStrPatametersFromArray(Parameters));
            Package.ClientCode = User;
            ConnectionAgent.WaitingPackageID = Package.PackageID;
            ConnectionAgent.Executed = false;
            MainForm.ShowQueryWait();
            if (ConnectionAgent.SendPackage(Package.GetPackage()))
                {
                var stopWatch = new Stopwatch();
                stopWatch.Start();
                while (!ConnectionAgent.RequestReady & ConnectionAgent.OnLine)
                    {
                    Thread.Sleep(300);

                    const int MAX_WAIT_TIME_MILISEC = 5000;
                    if (stopWatch.ElapsedMilliseconds > MAX_WAIT_TIME_MILISEC)
                        {
                        RemoteCallDialog.WaitForServerResponse();
                        break;
                        }
                    }

                if (!Current.ConnectionAgent.WifiEnabled)
                    {
                    Thread.Sleep(1000);
                    Current.StartConnectionAgent();
                    }

                MainForm.ShowQueryComplated();

                if (ConnectionAgent.Package == null || !ConnectionAgent.Executed)
                    {

                    "Пропала связь с сервером!".ShowMessage();
                    return null;
                    }
                //if (ConnectionAgent.Package.Parameters == "#ERROR:1C_AGENT_DISABLE#")
                //    {
                //    ConnectionAgent.Package.Parameters = string.Empty;
                //    ConnectionAgent.RequestReady = false;
                //    "1С-агент неактивен. Обратитесь к оператору!".ShowMessage();
                //    return null;
                //    }
                object[] result = PackageConvertation.GetPatametersFromStr(ConnectionAgent.Package.Parameters);

                ConnectionAgent.RequestReady = false;

                if (result.Length == 0
                    || (result.GetType() == typeof(object[]) && result.Length == 1 && result[0] == null))
                    {
                    return null;
                    }

                LastQueryIsSuccessfull = true;
                return result;
                }
            return null;
        }
Ejemplo n.º 11
0
        private void ReadPackages()
        {
            #region Define local variables

            string StorekeeperQuery = "", StorekeeperQueryHead = "";
            lastPackageResived = DateTime.Now.Ticks;
            //Byte[] emptyData = System.Text.Encoding.GetEncoding(1251).GetBytes("");

            //int streamLength;

            #endregion

            while ( !NeedAbortThread )
                {
                #region Getting package

                if ( PackageViaWireless.isCompletelyPackage(StorekeeperQueryHead) )
                    {
                    StorekeeperQuery = StorekeeperQueryHead;
                    StorekeeperQueryHead = "";
                    }
                else
                    {
                    StorekeeperQuery = ReadStream();
                    }
                Console.WriteLine("Прочитано " + StorekeeperQuery);
                Package = null;
                if ( StorekeeperQuery == null )
                    {
                    return;
                    }

                StorekeeperQuery = StorekeeperQueryHead + StorekeeperQuery;

                if ( !PackageViaWireless.isCompletelyPackage(StorekeeperQuery) ) continue;

                Package = new PackageViaWireless(StorekeeperQuery, out StorekeeperQueryHead);

                StorekeeperQuery = "";

                #endregion

                switch ( Package.QueryName )
                    {
                    case "Ping":
                        Package.QueryName = "PingReply";
                        SendPackage(Package.GetPackage());
                        continue;

                    case "PingReply":
                        PingValue = ( PackageConvertation.GetPatametersFromStr(Package.Parameters)[0] as string );
                        continue;

                    case "Message":
                        object[] Parameters = PackageConvertation.GetPatametersFromStr(Package.Parameters);
                        System.Windows.Forms.MessageBox.Show(Parameters[0] as string);

                        // В параметры записывается только ID, текс сообщения уже не нужен
                        Package.Parameters = ( ( int ) Parameters[1] ).ToString();
                        SendPackage(Package.GetPackage());
                        continue;
                    }

                #region PackageHandling
                if ( Package.PackageID != WaitingPackageID ) continue;
                Executed = true;
                RequestReady = true;

                while ( RequestReady )
                    {
                    Thread.Sleep(100);
                    }
                #endregion
                }
        }
Ejemplo n.º 12
0
 private void sentDeliveryReport(string sentPackageId)
 {
     object[] parameters = new object[] { sentPackageId, lastPackageId.Equals(sentPackageId) };
     var package = new PackageViaWireless(0, true);
     package.DefineQueryAndParams(PackageConvertation.PACKAGE_CONFIRMATION_NAME, PackageConvertation.GetStrPatametersFromArray(parameters));
     SendPackage(package.GetPackage());
 }
Ejemplo n.º 13
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.º 14
0
 /// <summary>
 /// Отправить пакет клиенту (ТСД)
 /// </summary>
 /// <param name="package"></param>
 private void WritePackage(PackageViaWireless package)
 {
     Trace.WriteLine(string.Format("WritePackage package.PackageID = {0};\tQueryNema = {1};\t{2}", package.PackageID, package.QueryName, DateTime.Now));
     WriteStream(package.GetPackage(), package.PackageID);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Отправить пакет клиенту (ТСД)
 /// </summary>
 /// <param name="package"></param>
 private void WritePackage(PackageViaWireless package)
 {
     Trace.WriteLine(string.Format("WritePackage package.PackageID = {0};\tQueryNema = {1};\t{2}", package.PackageID, package.QueryName, DateTime.Now));
     WriteStream(package.GetPackage(), package.PackageID);
 }
Ejemplo n.º 16
0
        private void WriteStream(Byte[] packageData, string packageId)
        {
            var parameters = Aramis.Net.PackageConvertation.GetStrPatametersFromArray(new object[] { packageId });
            var packageOfDeliveryConfirmation = new PackageViaWireless(0, true);
            packageOfDeliveryConfirmation.DefineQueryAndParams(PACKAGE_CONFIRMATION_NAME, parameters);

            lock (this)
                {
                packageConfirmation = packageOfDeliveryConfirmation.GetPackage();

                lastPackage = packageData;
                lastPackageId = packageId;
                actualLastPackageTime = DateTime.Now;

                if (!TCPStream.CanWrite)
                    {
                    CloseChannels();
                    return;
                    }

                try
                    {
                    TCPStream.Write(packageData, 0, packageData.Length);
                    }
                catch
                    {
                    CloseChannels();
                    return;
                    }
                }
            waitForConfirmationReply = true;
        }
Ejemplo n.º 17
0
        private bool Connect()
        {
            try
                {
                TCPClient = new TcpClient(IPAddress, PortNumber);
                }
            catch (Exception exc)
                {
                Console.WriteLine("Can't connect: " + exc.Message);
                return false;
                }

            String ConnResult = "";

            try
                {
                TCPStream = TCPClient.GetStream();
                byte[] StreamTest = new byte[10];

                IAsyncResult NetStreamReadRes = TCPStream.BeginRead(StreamTest, 0, StreamTest.Length, null, null);

                if (NetStreamReadRes.AsyncWaitHandle.WaitOne(1500, false))
                    {

                    int streamLength = TCPStream.EndRead(NetStreamReadRes);
                    ConnResult = Encoding.GetEncoding(1251).GetString(StreamTest, 0, streamLength);
                    }
                }
            catch (Exception exc)
                {
                Console.WriteLine("Can't create the network stream: " + exc.Message);
                return false;
                }
            if (ConnResult != "$M$_$ERVER") return false;

            SetConnectionStatus(true);
            if (Client.User != 0)
                {
                PackageViaWireless Package = new PackageViaWireless(0, true);
                Package.DefineQueryAndParams("ConnectionRecovery", "");
                Package.ClientCode = Client.User;
                SendPackage(Package.GetPackage());
                }
            // Запуск пинга сервера

            //PingAgent = new CallTimer(PingServer, 500);
            return true;
        }
Ejemplo n.º 18
0
 public void SendToServer(string QueryName, params object[] Parameters)
 {
     PackageViaWireless Package = new PackageViaWireless(0, true);
     Package.DefineQueryAndParams(QueryName, PackageConvertation.GetStrPatametersFromArray(Parameters));
     Package.ClientCode = User;
     ConnectionAgent.WaitingPackageID = Package.PackageID;
     ConnectionAgent.SendPackage(Package.GetPackage());
 }
Ejemplo n.º 19
0
 private void InformFileAccepted(bool update)
 {
     // Отправка сообщение серверу, что файл получен
     PackageViaWireless Package = new PackageViaWireless(Client.User, true);
     Package.DefineQueryAndParams("FileAccepted", "");
     SendPackage(Package.GetPackage());
     System.Threading.Thread.Sleep(1000);
     if (update)
         lock (Client)
             {
             Client.TryToUpdate();
             }
 }