ForwarderMessageHandler.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Globalization;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using GodotTools.IdeMessaging.Utils;
  7. namespace GodotTools.IdeMessaging.CLI
  8. {
  9. public class ForwarderMessageHandler : IMessageHandler
  10. {
  11. private readonly StreamWriter outputWriter;
  12. private readonly SemaphoreSlim outputWriteSem = new SemaphoreSlim(1);
  13. public ForwarderMessageHandler(StreamWriter outputWriter)
  14. {
  15. this.outputWriter = outputWriter;
  16. }
  17. public async Task<MessageContent> HandleRequest(Peer peer, string id, MessageContent content, ILogger logger)
  18. {
  19. await WriteRequestToOutput(id, content);
  20. return new MessageContent(MessageStatus.RequestNotSupported, "null");
  21. }
  22. private async Task WriteRequestToOutput(string id, MessageContent content)
  23. {
  24. using (await outputWriteSem.UseAsync())
  25. {
  26. await outputWriter.WriteLineAsync("======= Request =======");
  27. await outputWriter.WriteLineAsync(id);
  28. await outputWriter.WriteLineAsync(content.Body.Count(c => c == '\n').ToString(CultureInfo.InvariantCulture));
  29. await outputWriter.WriteLineAsync(content.Body);
  30. await outputWriter.WriteLineAsync("=======================");
  31. await outputWriter.FlushAsync();
  32. }
  33. }
  34. public async Task WriteResponseToOutput(string id, MessageContent content)
  35. {
  36. using (await outputWriteSem.UseAsync())
  37. {
  38. await outputWriter.WriteLineAsync("======= Response =======");
  39. await outputWriter.WriteLineAsync(id);
  40. await outputWriter.WriteLineAsync(content.Body.Count(c => c == '\n').ToString(CultureInfo.InvariantCulture));
  41. await outputWriter.WriteLineAsync(content.Body);
  42. await outputWriter.WriteLineAsync("========================");
  43. await outputWriter.FlushAsync();
  44. }
  45. }
  46. public async Task WriteLineToOutput(string eventName)
  47. {
  48. using (await outputWriteSem.UseAsync())
  49. await outputWriter.WriteLineAsync($"======= {eventName} =======");
  50. }
  51. }
  52. }