Program.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Threading;
  5. using XUnity.AutoTranslator.Plugin.ExtProtocol;
  6. namespace Lec.ExtProtocol
  7. {
  8. class Program
  9. {
  10. static void Main( string[] args )
  11. {
  12. // Implementation of this is based off of texel-sensei's LEC implementation
  13. try
  14. {
  15. if( args.Length == 0 )
  16. {
  17. Console.WriteLine( "This program is automatically run during a game session if LEC is selected, and will be automatically stopped afterwards. This program cannot be run independently." );
  18. Console.WriteLine( "Press any key to exit." );
  19. Console.ReadKey();
  20. return;
  21. }
  22. var powerTranslatorPathPayload = args[ 0 ];
  23. var powerTranslatorPath = Encoding.UTF8.GetString( Convert.FromBase64String( powerTranslatorPathPayload ) );
  24. var dllPath = Path.Combine( powerTranslatorPath, @"Nova\JaEn\EngineDll_je.dll" );
  25. using( var translator = new LecTranslationLibrary( dllPath ) )
  26. {
  27. using( var stdout = Console.OpenStandardOutput() )
  28. using( var writer = new StreamWriter( stdout ) )
  29. using( var stdin = Console.OpenStandardInput() )
  30. using( var reader = new StreamReader( stdin ) )
  31. {
  32. writer.AutoFlush = true;
  33. while( true )
  34. {
  35. var receivedPayload = reader.ReadLine();
  36. if( string.IsNullOrEmpty( receivedPayload ) ) return;
  37. var message = ExtProtocolConvert.Decode( receivedPayload ) as TranslationRequest;
  38. if( message == null ) return;
  39. var translatedTexts = new string[ message.UntranslatedTexts.Length ];
  40. for( int i = 0; i < message.UntranslatedTexts.Length; i++ )
  41. {
  42. var untranslatedText = message.UntranslatedTexts[ i ];
  43. var translatedText = translator.Translate( untranslatedText );
  44. translatedTexts[ i ] = translatedText;
  45. }
  46. var response = new TranslationResponse
  47. {
  48. Id = message.Id,
  49. TranslatedTexts = translatedTexts
  50. };
  51. var translatedPayload = ExtProtocolConvert.Encode( response );
  52. writer.WriteLine( translatedPayload );
  53. }
  54. }
  55. }
  56. }
  57. catch( Exception )
  58. {
  59. // "Graceful shutdown"
  60. }
  61. }
  62. }
  63. }