Пример #1
0
        static void Main(string[] args)
        {
            string text     = GetText(args);
            string toLang   = GetLang(args, 1, "На какой язык переводить? (en, ru, de, ...)");
            string fromLang = GetLang(args, 2, "С какого языка переводить? (en, ru, de, ..., пусто - автоопределение)");

            ITranslator translator = new XmlTranslator();

            Console.WriteLine("Перевод:");
            Console.WriteLine(translator.Translate(text, toLang, fromLang));
        }
Пример #2
0
        /**
         * parse manifest.xml, get manifestXml as xml text.
         *
         * @throws IOException
         */
        private async Task parseManifestXml()
        {
            XmlTranslator     xmlTranslator = new XmlTranslator();
            ApkMetaTranslator translator    = new ApkMetaTranslator();
            XmlStreamer       xmlStreamer   = new CompositeXmlStreamer(xmlTranslator, translator);

            byte[] data = await getFileData(AndroidConstants.MANIFEST_FILE);

            if (data == null)
            {
                throw new ParserException("Manifest file not found");
            }
            await transBinaryXml(data, xmlStreamer);

            this.manifestXml = xmlTranslator.getXml();
            this.apkMeta     = translator.getApkMeta();
        }
Пример #3
0
        /**
         * trans binary xml file to text xml file.
         *
         * @param path the xml file path in apk file
         * @return the text. null if file not exists
         * @throws IOException
         */
        public async Task <string> transBinaryXml(string path)
        {
            byte[] data = await getFileData(path);

            if (data == null)
            {
                return(null);
            }
            if (this.resourceTable == null)
            {
                await parseResourceTable();
            }

            XmlTranslator xmlTranslator = new XmlTranslator();

            await transBinaryXml(data, xmlTranslator);

            return(xmlTranslator.getXml());
        }
Пример #4
0
        public async Task <string> transBinaryXml(StorageFile sf)
        {
            byte[] data = await Util.ReadFile(sf);

            if (data == null)
            {
                return(null);
            }
            if (this.resourceTable == null)
            {
                await parseResourceTable();
            }

            XmlTranslator xmlTranslator = new XmlTranslator();

            await transBinaryXml(data, xmlTranslator);

            return(xmlTranslator.getXml());
        }
 public XmlTranslatorComponent()
 {
     _microComponent = new XmlTranslator();
 }
Пример #6
0
        /// <summary>
        /// обработчик входящих запросов терминалов. Здесь "бизнес-логика"
        /// </summary>
        /// <param name="ar"></param>
        void TcpServer_RequestServer(IAsyncResult ar)
        {
            string rawCommandString = "[не установлено]";

            LogMessage logMessage = new LogMessage();

            try
            {
                Socket listen_socket = (Socket)ar.AsyncState;

                Socket local = listen_socket.EndAccept(ar);
                this._readyToAccept.Set();

                //сокет будет закрыт с задержкой, чтобы все отправляемые данные были отправлены
                //размер задержки см. ниже local.Close(..)
                local.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, true);

                int requestNumber = System.Threading.Interlocked.Increment(ref _requestCounter);

                using (NetworkStream networkStream = new NetworkStream(local, false))
                {
                    //                if (d.DataAvailable)
                    //try
                    //{
                    //TODO: магическое число
                    byte[] buffer = new byte[2000];

                    int nbytes = networkStream.Read(buffer, 0, buffer.Length);

                    //TODO: как быть если одним единственным чтением не обойдется
                    //FireEvent
                    //(
                    //    BuroStoreServiceEventArgs.EventType.Info,
                    //    "------------------------------"
                    //);

                    //FireEvent
                    //(
                    //    BuroStoreServiceEventArgs.EventType.Info,
                    //    buffer,
                    //    nbytes
                    //);

                    //FireEvent
                    //(
                    //    BuroStoreServiceEventArgs.EventType.Info,
                    //    ""
                    //);

                    rawCommandString = this._encoding1251.GetString(buffer, 0, nbytes);

                    logMessage.AppendLine(rawCommandString);

                    XmlTranslator clientTranslator;

                    //TODO: модифай
                    //if (!rawCommandString.Contains("<session>"))
                    //{
                    //    rawCommandString = "<session>" + rawCommandString + "</session>";

                    //}

                    //TODO: пока сосуществуют два способа обращения к сервису: команда с разделителями, команда в xml-форматировании
                    //try
                    {
                        clientTranslator = new XmlTranslator(rawCommandString.Replace("\0", ""), this._sqlCommandManager, this._resourceCache);

                    }
                    //catch
                    //{   //похоже запрос пришел в старом виде
                    //    clientTranslator = new OldTranslator(rawCommandString, this._sqlCommandManager);

                    //}

                    byte[] rawResponse;
                    long responseLength;
                    Translator.ResponseType responseType;

                    try
                    {
                        rawResponse = clientTranslator.GetBytes(out responseLength, out responseType);

                        if (responseType == Translator.ResponseType.Binary)
                        {
                            logMessage.AppendLine("[Двоичные данные]");

                        }
                        else if (responseType == Translator.ResponseType.string1251)
                        {
                            logMessage.AppendLine(this._encoding1251.GetString(rawResponse, 0, (int)responseLength));

                        }

                        //FireEvent
                        //(
                        //    BuroStoreServiceEventArgs.EventType.Info,
                        //    rawResponse,
                        //    (int)responseLength
                        //);

                        //если используется XmlTranslator, то предварять длиной и контрольной суммой
                        if (clientTranslator is XmlTranslator)
                        {
                            networkStream.Write(BitConverter.GetBytes((Int32)responseLength), 0, sizeof(Int32));
                            //TODO: зарезервировал место под контрольную сумму
                            networkStream.Write(BitConverter.GetBytes((Int32)0x0E0E), 0, sizeof(Int32));

                        }

                        networkStream.Write(rawResponse, 0, (int)responseLength);

                        #region Логирование процедурой term.ScanerSaveCommand2
                        SqlCommand cmdLog = this._sqlCommandManager[Properties.Settings.Default.LogProcedureName];

                        cmdLog.Connection = new SqlConnection(this._sqlCommandManager.ConnectionString);

                        try
                        {
                            cmdLog.Connection.Open();

                            cmdLog.Parameters["@procedurename"].Value = clientTranslator.Name;
                            cmdLog.Parameters["@procedureresult"].Value = clientTranslator.Return;
                            //cmdLog.Parameters["@termid"].Value = clientTranslator.TermID;
                            cmdLog.Parameters["@terminalserial"].Value = clientTranslator.TerminalSerial;
                            cmdLog.Parameters["@userid"].Value = clientTranslator.UserID;
                            cmdLog.Parameters["@count"].Value = clientTranslator.QueryCounterValue;

                            clientTranslator.PlaceParametersInSqlCommand(cmdLog);

                            cmdLog.ExecuteNonQuery();

                        }
                        finally
                        {
                            cmdLog.Connection.Close();
                            cmdLog.Connection.Dispose();

                        }

                        #endregion

                        FireEvent
                        (
                            BuroStoreServiceEventArgs.EventType.Info,
                            logMessage.ToString()

                        );

                    }
                    catch (Exception e)
                    {
                        this.FireEvent
                        (
                            BuroStoreService.BuroStoreServiceEventArgs.EventType.Error,
                            string.Format
                            (
                                "{0}\r\n---------\r\n{1}\r\n{2}",
                                rawCommandString,
                                e.Message,
                                e.StackTrace
                            )
                        );

                    }

                        #region Может пригодится когда-нибудь
                        //TODO: магическое число
                        //byte[] memBuffer = new byte[10000];

                        //StringBuilder xmlResponse = new StringBuilder();

                        //начальный размер 1000 байт
                        //using (MemoryStream memStream = new MemoryStream(1000))
                        //{
                        //    StreamWriter responseWriter
                        //        = new StreamWriter(memStream, this._encoding1251) { AutoFlush = true };
                        //    {
                        //        ClientResponse response = new ClientResponse(clientCommand, this._sqlCommandManager);

                        //        response.GetBytes();

                        //        //----------

                        //        SqlCommand cmd = this._sqlCommandManager[clientCommand.Name];

                        //        cmd.Connection = new SqlConnection(this._connectionString);
                        //        cmd.Connection.Open();

                        //        try
                        //        {

                        //            foreach (string paramName in clientCommand.Parameters.Keys)
                        //            {
                        //                if (cmd.Parameters.Contains(paramName))
                        //                {
                        //                    cmd.Parameters[paramName].Value = clientCommand.Parameters[paramName];

                        //                }

                        //            }

                        //            //TODO: проверить в каком режиме пришел запрос: в старом или в новом
                        //            if (!clientCommand.ПрежнийРежим)
                        //            {
                        //                SqlDataReader reader = cmd.ExecuteReader();

                        //                if (reader.HasRows)
                        //                {
                        //                    responseWriter.Write("<recordset>");

                        //                    while (reader.Read())
                        //                    {
                        //                        responseWriter.Write("<r>");

                        //                        for (int i = 0; i < reader.FieldCount; i++)
                        //                        {
                        //                            responseWriter.Write(string.Format("<{0}>{1}</{0}>", reader.GetName(i), reader.GetValue(i).ToString()));

                        //                        }

                        //                        responseWriter.Write("</r>");

                        //                    }

                        //                    responseWriter.Write("</recordset>");

                        //                }

                        //                reader.Close();

                        //                cmd.Connection.Close();
                        //                cmd.Connection.Dispose();

                        //                //TODO: эту секцию можно вовсе не выводить,
                        //                //если out-параметры отсутствуют
                        //                responseWriter.Write("<outparams>");

                        //                for (int i = 0; i < cmd.Parameters.Count; i++)
                        //                {
                        //                    if
                        //                    (cmd.Parameters[i].Direction == System.Data.ParameterDirection.InputOutput
                        //                        || cmd.Parameters[i].Direction == System.Data.ParameterDirection.Output
                        //                    )
                        //                    {
                        //                        responseWriter.Write("<p>");

                        //                        responseWriter.Write(cmd.Parameters[i].Value.ToString());

                        //                        responseWriter.Write("</p>");

                        //                    }

                        //                }

                        //                responseWriter.Write("</outparams>");

                        //            }
                        //            else
                        //            {
                        //                cmd.Connection.Close();
                        //                cmd.Connection.Dispose();

                        //                //флажок нужен чтобы перед первым параметром 0x1E не вставился
                        //                bool firstParam = true;
                        //                for (int i = 0; i < cmd.Parameters.Count; i++)
                        //                {
                        //                    if
                        //                    (cmd.Parameters[i].Direction == System.Data.ParameterDirection.InputOutput
                        //                        || cmd.Parameters[i].Direction == System.Data.ParameterDirection.Output
                        //                    )
                        //                    {
                        //                        if (!firstParam)
                        //                        {
                        //                            //разделитель
                        //                            responseWriter.Write(0x1E);

                        //                        }

                        //                        responseWriter.Write(cmd.Parameters[i].Value.ToString());

                        //                        firstParam = false;

                        //                    }

                        //                }

                        //                // ноль конца строки (для прежнего способа)
                        //                responseWriter.Write(0);

                        //            }

                        //        }
                        //        catch (SqlException sqlException)
                        //        {
                        //            //сообщаю подписчикам тельнета
                        //            FireEvent
                        //            (
                        //                BuroStoreServiceEventArgs.EventType.Error,
                        //                sqlException.Message + "\r\nStackTrace:\r\n" + sqlException.StackTrace
                        //            );

                        //            responseWriter.Write
                        //            (
                        //                string.Format
                        //                (
                        //                    "<err><cod>{0}</cod><msg>{1}</msg></err>",
                        //                    //TODO:как-то добыть сюда правильный код
                        //                    //для пользовательских ошибок,
                        //                    //который Толик возвращает в @ret
                        //                    sqlException.Number,
                        //                    sqlException.Message
                        //                )

                        //            );

                        //        }

                        //        //responseWriter.Flush();

                        //    }
                        //    //byte[] bytes = this._encoding1251.GetBytes(xmlResponse.ToString());

                        //    //после закрытия потока свойство Length будет недоступно
                        //    long bytesWritten = memStream.Length;

                        //    byte[] bytes = memStream.GetBuffer();

                        //    FireEvent
                        //    (
                        //        BuroStoreServiceEventArgs.EventType.Info,
                        //        _encoding1251.GetString(bytes)
                        //    );

                        //    networkStream.Write(bytes, 0, (int)bytesWritten);

                        //}

                        //}
                        //else
                        //{
                        //    switch (clientCommand.Name)
                        //    {
                        //                                                                    #region Get barcode info
                        //    //ответ на запрос информации о штрихкоде
                        //    case "Get barcode info":

                        //        using (SqlConnection cnn = new SqlConnection(ConnectionString))
                        //        {
                        //            cnn.Open();

                        //            SqlCommand cmd = cnn.CreateCommand();

                        //            cmd.CommandType = System.Data.CommandType.Text;
                        //            cmd.CommandText = string.Format("SELECT P.Name FROM Products P INNER JOIN Barcode B ON P.CounterID = B.CounterID WHERE B.Code = '{0}'", ClientCommand.ParameterStrings(rawCommandString)[0].ToString());

                        //            string result = cmd.ExecuteScalar() as string;

                        //            cnn.Close();

                        //            byte[] bytes = this._encoding.GetBytes(result);

                        //            networkStream.Write(bytes, 0, bytes.Length);

                        //        }

                        //        break;
                        //    #endregion
                        //        //#region Determine the need for updates
                        //        //                            //ответ на запрос обновления базы штрихкодов и прошивки
                        //        //                            case "Determine the need for updates":
                        //        //                                //writer.Write("<Firmware><ResourceId>8</ResourceId><BlocksNumber>1</BlocksNumber></Firmware>");
                        //        //                                //writer.Write("<DataBase><ResourceId>9</ResourceId><BlocksNumber>9</BlocksNumber></DataBase>");
                        //        //                                break;
                        //        //#endregion
                        //        //#region Get resource info
                        //        //                            case "Get resource info":
                        //        //                                string resource_length;
                        //        //                                if(this.Resources.ContainsKey(ClientCommand.ParameterValues(rawCommandString)[0]))
                        //        //                                {
                        //        //                                    resource_length = this.Resources[ClientCommand.ParameterValues(rawCommandString)[0]].Length.ToString();

                        //        //                                }
                        //        //                                else
                        //        //                                {
                        //        //                                    resource_length = "0";

                        //        //                                }

                        //        //                                byte[] byts = this._encoding.GetBytes(resource_length);

                        //        //                                d.Write(byts, 0, byts.Length);

                        //        //                                // ноль конца строки
                        //        //                                d.WriteByte(0);

                        //        //                                break;
                        //        //#endregion
                        //        //#region Get resource
                        //        //                            case "Get resource":
                        //        //                                {
                        //        //                                    string resourceUri = ClientCommand.ParameterValues(rawCommandString)[0];
                        //        //                                    int blockStart = int.Parse(ClientCommand.ParameterValues(rawCommandString)[1]);
                        //        //                                    int blockLength = int.Parse(ClientCommand.ParameterValues(rawCommandString)[2]);

                        //        //                                    d.Write(this.Resources[resourceUri], blockStart, blockLength);

                        //        //                                }

                        //        //                                break;
                        //        //#endregion

                        //                                                                                                                                                                                                                                                            #region Make database snapshot
                        //    case "Make database snapshot":
                        //        {
                        //            //string resourceUri = ClientCommand.ParameterValues(rawCommandString)[0];
                        //            //int blockStart = int.Parse(ClientCommand.ParameterValues(rawCommandString)[1]);
                        //            //int blockLength = int.Parse(ClientCommand.ParameterValues(rawCommandString)[2]);

                        //            int db_key;
                        //            int descr_key;

                        //            //TODO: на время отладки
                        //            #region

                        //            //HACK: весь этот блок
                        //            using (SqlConnection cnn = new SqlConnection(ConnectionString))
                        //            {
                        //                cnn.Open();

                        //                SqlCommand cmd = cnn.CreateCommand();
                        //                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        //                cmd.CommandText = "dbo.[GoodsForOfflineScanning]";
                        //                SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SingleResult);

                        //                Table_ArtikulInfo t = new Table_ArtikulInfo();

                        //                int n_Barcode = reader.GetOrdinal("barcode");
                        //                int n_ProductId = reader.GetOrdinal("artikul");
                        //                int n_Name = reader.GetOrdinal("description");

                        //                while (reader.Read())
                        //                {
                        //                    t.AddRow(reader[n_Barcode] as string, reader[n_ProductId] as string, reader[n_Name] as string);

                        //                }

                        //                cnn.Close();

                        //                db_key = this._resourceCache.AddResource(t.GetBytes());
                        //                descr_key = this._resourceCache.AddResource(t.GetBytes_Descriptions());

                        //                int breakpoint_002 = 0;

                        //            }

                        //            #endregion

                        //            string xml_response
                        //                = string.Format
                        //                    (
                        //                        "<databaseFileKey>{0}</databaseFileKey><databaseFileSize>{1}</databaseFileSize><databaseFileChecksum>{5}</databaseFileChecksum><descriptionFileKey>{2}</descriptionFileKey><descriptionFileSize>{3}</descriptionFileSize><descriptionFileChecksum>{6}</descriptionFileChecksum><currentTime>{4}</currentTime>",
                        //                        db_key,
                        //                        this._resourceCache.GetResource(db_key).Length,
                        //                        descr_key,
                        //                        this._resourceCache.GetResource(descr_key).Length,
                        //                        DateTime.Now.ToString(),
                        //                        this._resourceCache.GetResourceChecksum(db_key),
                        //                        this._resourceCache.GetResourceChecksum(descr_key)
                        //                    );

                        //            byte[] bytes = this._encoding.GetBytes(xml_response);

                        //            FireEvent
                        //            (
                        //                BuroStoreServiceEventArgs.EventType.Info,
                        //                string.Format
                        //                (
                        //                    "\r\n>>ответ на [{0}] {1}>> {2}",
                        //                    requestNumber,
                        //                    DateTime.Now.ToString(),
                        //                    xml_response
                        //                )
                        //            );

                        //            networkStream.Write(bytes, 0, bytes.Length);

                        //            // ноль конца строки
                        //            networkStream.WriteByte(0);

                        //        }

                        //        break;
                        //    #endregion
                        //                                            #region Get resource by id
                        //    case "Get resource by id":
                        //        {
                        //            int resourceId = int.Parse(ClientCommand.ParameterStrings(rawCommandString)[0]);
                        //            int blockStart = int.Parse(ClientCommand.ParameterStrings(rawCommandString)[1]);
                        //            int blockLength = int.Parse(ClientCommand.ParameterStrings(rawCommandString)[2]);

                        //            networkStream.Write(this._resourceCache.GetResource(resourceId), blockStart, blockLength);

                        //        }

                        //        break;

                        //    #endregion
                        //                        #region Команда неизвестна сервису
                        //    default:
                        //        FireEvent(BuroStoreServiceEventArgs.EventType.Warning, "Команда не распознана");

                        //        break;
                        //    #endregion

                        //    }

                        //}
            #endregion
                    //}
                    #region Может пригодится когда-нибудь
                    //catch (SqlException sqlException)
                    //{
                    //    //сообщаю подписчикам тельнета
                    //    FireEvent
                    //    (
                    //        BuroStoreServiceEventArgs.EventType.Error,
                    //        sqlException.Message + "\r\nStackTrace:\r\n" + sqlException.StackTrace
                    //    );

                    //    //FireEvent
                    //    //(
                    //    //    BuroStoreServiceEventArgs.EventType.Info,
                    //    //    string.Format
                    //    //    (
                    //    //        "<err><cod>{0}</cod><msg>{1}</msg></err>",
                    //    //    //TODO:как-то добыть сюда правильный код, который Толик возвращает в @ret
                    //    //        sqlException.Number,
                    //    //        "**" + sqlException.Message
                    //    //    )
                    //    //);

                    //    //формирую ответ терминалу
                    //    byte[] bytes
                    //        = this._encoding1251.GetBytes
                    //        (
                    //            string.Format
                    //            (
                    //                "<err><cod>{0}</cod><msg>{1}</msg></err>",
                    //                //TODO:как-то добыть сюда правильный код, который Толик возвращает в @ret
                    //                sqlException.Number,
                    //                sqlException.Message
                    //            )

                    //        );

                    //    networkStream.Write(bytes, 0, bytes.Length);

                    //    // ноль конца строки
                    //    networkStream.WriteByte(0);

                    //}
            #endregion
                }
                #region Может пригодится когда-нибудь
                //shutdown перед закрытием гарантирует отправку всех данных
                //local.Shutdown(SocketShutdown.Both);
                //local.Close();
                #endregion

                //другой вариант
                local.Close(240);

            }
            catch (Exception e)
            {
                this.FireEvent
                (
                    BuroStoreService.BuroStoreServiceEventArgs.EventType.Error,
                    string.Format
                    (
                        "{0}\r\n---------\r\n{1}\r\n{2}",
                        rawCommandString,
                        e.Message,
                        e.StackTrace
                    )
                );

            }
        }