Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. public void sendMessage(Stream stream, string message)
  2. {
  3. try
  4. {
  5. List<byte> lb = new List<byte>();
  6. string aux = message;
  7. bool flagStart = false;
  8. int size;
  9. while (message.Length > _maxLengthMessage)
  10. {
  11. lb = new List<byte>();
  12. // I cut the mesasge in smaller pieces to send
  13. message = aux.Substring(0, _maxLengthMessage);
  14. aux = aux.Substring(_maxLengthMessage);
  15. if (!flagStart)
  16. {
  17. // In doc of Websockets i sign this piece: not the end, text
  18. lb.Add(0x01);
  19. flagStart = !flagStart;
  20. }
  21. else
  22. {
  23. // In doc of Websockets i sign this piece: not the end, continuation
  24. lb.Add(0x00);
  25. }
  26. size = message.Length;
  27.  
  28. lb.Add((byte)size);
  29. lb.AddRange(Encoding.UTF8.GetBytes(message));
  30. stream.Write(lb.ToArray(), 0, size + 2);
  31. }
  32. lb = new List<byte>();
  33. if (!flagStart)
  34. {
  35. // If is this the only message we mark with: end of message, text
  36. lb.Add(0x81);
  37. flagStart = !flagStart;
  38. }
  39. else
  40. {
  41. //else Is the end of the message but is the continuation frame
  42. lb.Add(0x80);
  43. }
  44. size = aux.Length;
  45.  
  46. lb.Add((byte)size);
  47. lb.AddRange(Encoding.UTF8.GetBytes(aux));
  48. //lb.AddRange(Encoding.UTF8.GetBytes(i.ToString()));
  49. stream.Write(lb.ToArray(), 0, size+2);
  50.  
  51. }
  52. catch (Exception ex)
  53. {
  54. throw ex;
  55. }
  56.  
  57. }
  58.  
  59. static private byte[] CreateFrame(string message, MessageType messageType = MessageType.Text, bool messageContinues = false)
  60. {
  61. byte b1 = 0;
  62. byte b2 = 0;
  63.  
  64. switch (messageType)
  65. {
  66. case MessageType.Continuos:
  67. b1 = 0;
  68. break;
  69. case MessageType.Text:
  70. b1 = 1;
  71. break;
  72. case MessageType.Binary:
  73. b1 = 2;
  74. break;
  75. case MessageType.Close:
  76. b1 = 8;
  77. break;
  78. case MessageType.Ping:
  79. b1 = 9;
  80. break;
  81. case MessageType.Pong:
  82. b1 = 10;
  83. break;
  84. }
  85.  
  86. b1 = (byte)(b1 + 128); // set FIN bit to 1
  87.  
  88. byte[] messageBytes = Encoding.UTF8.GetBytes(message);
  89.  
  90. if (messageBytes.Length < 126)
  91. {
  92. b2 = (byte)messageBytes.Length;
  93. }
  94. else
  95. {
  96. if (messageBytes.Length < Math.Pow(2,16)-1)
  97. {
  98. b2 = 126;
  99.  
  100. }
  101. else
  102. {
  103. b2 = 127;
  104. }
  105.  
  106. }
  107.  
  108. byte[] frame = null;
  109.  
  110. if(b2 < 126)
  111. {
  112. frame = new byte[messageBytes.Length + 2];
  113. frame[0] = b1;
  114. frame[1] = b2;
  115. Array.Copy(messageBytes, 0, frame, 2, messageBytes.Length);
  116. }
  117. if(b2 == 126)
  118. {
  119. frame = new byte[messageBytes.Length + 4];
  120. frame[0] = b1;
  121. frame[1] = b2;
  122. byte[] lenght = BitConverter.GetBytes(messageBytes.Length);
  123. frame[2] = lenght[1];
  124. frame[3] = lenght[0];
  125. Array.Copy(messageBytes, 0, frame, 4, messageBytes.Length);
  126. }
  127.  
  128. if(b2 == 127)
  129. {
  130. frame = new byte[messageBytes.Length + 10];
  131. frame[0] = b1;
  132. frame[1] = b2;
  133. byte[] lenght = BitConverter.GetBytes((long)messageBytes.Length);
  134.  
  135. for(int i = 7, j = 2; i >= 0; i--, j++)
  136. {
  137. frame[j] = lenght[i];
  138. }
  139. }
  140.  
  141. return frame;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement