Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.28 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Client
  6. {
  7. class Buffer : IDisposable
  8. {
  9.  
  10. #region "MAIN"
  11.  
  12. List<byte> _bufferlist;
  13. byte[] _readbuffer;
  14. int _readpos;
  15. bool _buffupdate = false;
  16.  
  17. public Buffer()
  18. {
  19. _bufferlist = new List<byte>();
  20. _readpos = 0;
  21. }
  22.  
  23. public int GetReadPos()
  24. {
  25. return _readpos;
  26. }
  27.  
  28. public byte[] ToArray()
  29. {
  30. return _bufferlist.ToArray();
  31. }
  32.  
  33. public int Count()
  34. {
  35. return _bufferlist.Count;
  36. }
  37.  
  38. public int Length()
  39. {
  40. return Count() - _readpos;
  41. }
  42.  
  43. public void Clear()
  44. {
  45. _bufferlist.Clear();
  46. _readpos = 0;
  47. }
  48.  
  49. #endregion
  50.  
  51. #region"WRITE DATA"
  52. public void WriteBytes(byte[] input)
  53. {
  54. _bufferlist.AddRange(input);
  55. _buffupdate = true;
  56. }
  57.  
  58. public void WriteByte(byte input)
  59. {
  60. _bufferlist.Add(input);
  61. _buffupdate = true;
  62. }
  63.  
  64. public void WriteInteger(int input)
  65. {
  66. _bufferlist.AddRange(BitConverter.GetBytes(input));
  67. _buffupdate = true;
  68. }
  69.  
  70. public void WriteFloat(float input)
  71. {
  72. _bufferlist.AddRange(BitConverter.GetBytes(input));
  73. _buffupdate = true;
  74. }
  75.  
  76. public void WriteString(string input)
  77. {
  78. _bufferlist.AddRange(BitConverter.GetBytes(input.Length));
  79. _bufferlist.AddRange(Encoding.ASCII.GetBytes(input));
  80. _buffupdate = true;
  81. }
  82. #endregion
  83.  
  84. #region"READ DATA"
  85.  
  86. public int ReadInteger(bool peek = true)
  87. {
  88. if (_bufferlist.Count > _readpos)
  89. {
  90. if (_buffupdate)
  91. {
  92. _readbuffer = _bufferlist.ToArray();
  93. _buffupdate = false;
  94. }
  95.  
  96. int value = BitConverter.ToInt32(_readbuffer, _readpos);
  97. if (peek & _bufferlist.Count > _readpos)
  98. {
  99. _readpos += 4;
  100. }
  101. return value;
  102. }
  103. else
  104. {
  105. throw new Exception("Buffer is past his Limit");
  106. }
  107. }
  108.  
  109. public float ReadFloat(bool peek = true)
  110. {
  111. if (_bufferlist.Count > _readpos)
  112. {
  113. if (_buffupdate)
  114. {
  115. _readbuffer = _bufferlist.ToArray();
  116. _buffupdate = false;
  117. }
  118.  
  119. float value = BitConverter.ToSingle(_readbuffer, _readpos);
  120. if (peek & _bufferlist.Count > _readpos)
  121. {
  122. _readpos += 4;
  123. }
  124. return value;
  125. }
  126. else
  127. {
  128. throw new Exception("Buffer is past his Limit");
  129. }
  130. }
  131.  
  132. public byte ReadByte(bool peek = true)
  133. {
  134. if (_bufferlist.Count > _readpos)
  135. {
  136. if (_buffupdate)
  137. {
  138. _readbuffer = _bufferlist.ToArray();
  139. _buffupdate = false;
  140. }
  141.  
  142. byte value = _readbuffer[_readpos];
  143. if (peek & _bufferlist.Count > _readpos)
  144. {
  145. _readpos += 1;
  146. }
  147. return value;
  148. }
  149. else
  150. {
  151. throw new Exception("Buffer is past his Limit");
  152. }
  153. }
  154.  
  155. public byte[] ReadBytes(int length, bool peek = true)
  156. {
  157. if (_buffupdate)
  158. {
  159. _readbuffer = _bufferlist.ToArray();
  160. _buffupdate = false;
  161. }
  162.  
  163. byte[] value = _bufferlist.GetRange(_readpos, length).ToArray();
  164. if (peek & _bufferlist.Count > _readpos)
  165. {
  166. _readpos += length;
  167. }
  168. return value;
  169. }
  170.  
  171. public string ReadString(bool peek = true)
  172. {
  173. int length = ReadInteger(true);
  174. if (_buffupdate)
  175. {
  176. _readbuffer = _bufferlist.ToArray();
  177. _buffupdate = false;
  178. }
  179.  
  180. string value = Encoding.ASCII.GetString(_readbuffer, _readpos, length);
  181. if (peek & _bufferlist.Count > _readpos)
  182. {
  183. _readpos += length;
  184. }
  185. return value;
  186. }
  187.  
  188. #endregion
  189.  
  190. #region"IDisposable"
  191.  
  192. private bool disposedValue = false;
  193.  
  194. protected virtual void Dispose(bool disposing)
  195. {
  196. if (!disposedValue)
  197. {
  198. if (disposing)
  199. {
  200. _bufferlist.Clear();
  201. }
  202. _readpos = 0;
  203. }
  204. disposedValue = true;
  205. }
  206.  
  207. public void Dispose()
  208. {
  209. Dispose(true);
  210. GC.SuppressFinalize(this);
  211. }
  212.  
  213. #endregion
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement