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)); }
/** * 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(); }
/** * 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()); }
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(); }
/// <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 ) ); } }