Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. private BinaryReader SendMessage(MemoryStream stream)
  2. {
  3.  
  4. using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
  5. { client.Connect(IpEndpoint);
  6. using (var ns = new NetworkStream(client))
  7. {
  8. stream.Position = 0;
  9. ns.Write(BitConverter.GetBytes((Int32)stream.Length), 0, 4);
  10. stream.CopyTo(ns);
  11.  
  12. using (var br = new BinaryReader(ns))
  13. {
  14. var streamSize = br.ReadInt32();
  15.  
  16. var res = br.ReadBytes(streamSize);
  17.  
  18. var ms = new MemoryStream(res);
  19. ms.Position = 0;
  20. return new BinaryReader(ms);
  21. }
  22.  
  23. }
  24. }
  25.  
  26. public void Open(int НомерПорта = 6891, int КоличествоСлушателей = 1)
  27. {
  28. IsClosed = false;
  29.  
  30. IPEndPoint ipEndpoint = new IPEndPoint(IPAddress.Any, НомерПорта);
  31. Server = new TcpListener(ipEndpoint);
  32. Server.Start();
  33.  
  34. // Создадим задачи для прослушивания порта
  35. //При подключении клиента запустим метод ОбработкаСоединения
  36. // Подсмотрено здесь https://github.com/imatitya/netcorersi/blob/master/src/NETCoreRemoveServices.Core/Hosting/TcpServerListener.cs
  37. for (int i = 0; i < КоличествоСлушателей; i++)
  38. Server.AcceptTcpClientAsync().ContinueWith(OnConnect);
  39.  
  40. }
  41.  
  42.  
  43. // Метод для обработки сообщения от клиента
  44. private void OnConnect(Task<TcpClient> task)
  45. {
  46.  
  47. if (task.IsFaulted || task.IsCanceled)
  48. {
  49. // Скорее всего вызвано Server.Stop();
  50. return;
  51. }
  52.  
  53. // Получим клиента
  54. TcpClient client = task.Result;
  55.  
  56. // И вызовем метод для обработки данных
  57. //
  58. ExecuteMethod(client);
  59.  
  60. // Если Server не закрыт то запускаем нового слушателя
  61. if (!IsClosed)
  62. Server.AcceptTcpClientAsync().ContinueWith(OnConnect);
  63.  
  64. }
  65.  
  66.  
  67. static void SetResult(MemoryStream ms, NetworkStream ns)
  68. {
  69. ms.Position = 0;
  70. ns.Write(BitConverter.GetBytes((Int32)ms.Length), 0, 4);
  71. ms.CopyTo(ns);
  72. ns.Flush();
  73.  
  74.  
  75. }
  76.  
  77. private void RunMethod(NetworkStream ns, MemoryStream ms)
  78. {
  79. using (BinaryReader br = new BinaryReader(ms))
  80. {
  81. var msRes = new MemoryStream();
  82. using(BinaryWriter bw= new BinaryWriter(msRes))
  83. {
  84. var cm = (CallMethod)br.ReadByte();
  85.  
  86. if (cm == CallMethod.CallFunc)
  87. {
  88.  
  89. CallAsFunc(br, bw);
  90.  
  91.  
  92.  
  93.  
  94. }
  95.  
  96. bw.Flush();
  97. SetResult(msRes, ns);
  98. }
  99.  
  100. }
  101. }
  102. private void ExecuteMethod(TcpClient client)
  103. {
  104.  
  105. using (NetworkStream ns = client.GetStream())
  106. {
  107.  
  108. // Получим данные с клиента и на основании этих данных
  109. //Создадим ДанныеДляКлиета1 котрый кроме данных содержит
  110. //TcpClient для отправки ответа
  111. using (var br = new BinaryReader(ns))
  112. {
  113. var streamSize = br.ReadInt32();
  114.  
  115. var res = br.ReadBytes(streamSize);
  116.  
  117. var ms = new MemoryStream(res);
  118. ms.Position = 0;
  119. RunMethod(ns, ms);
  120. }
  121.  
  122.  
  123.  
  124. }
  125.  
  126. }
  127.  
  128. var wrap = Client.AutoWrapClient.GetProxy("127.0.0.1", 6891);
  129.  
  130. int res = wrap.ReturnParam(3);
  131. Console.WriteLine(res);
  132.  
  133. string str = wrap.ReturnParam("Hello");
  134. Console.WriteLine(str);
  135.  
  136. var Тестовый = wrap.Тип("TestDllForCoreClr.Тестовый", "TestDll");
  137. var TO = wrap.New(Тестовый,"Свойство из Конструктора");
  138. int rs = TO.ПолучитьЧисло(89);
  139. count = 0;
  140. stopWatch.Restart();
  141. for (int i = 0; i < 10000; i++)
  142. {
  143. count += TO.ПолучитьЧисло(i);
  144.  
  145. }
  146.  
  147. stopWatch.Stop();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement