Writer.cs


SUBMITTED BY: Guest

DATE: Aug. 17, 2017, 4:23 a.m.

FORMAT: Text only

SIZE: 20.2 kB

HITS: 407

  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. namespace Conquer_Online_Server.Network
  5. {
  6. public class Writer
  7. {
  8. public static void WriteStringWithLength(string arg, int len, int offset, byte[] buffer)
  9. {
  10. if (buffer == null)
  11. return;
  12. if (offset > buffer.Length - 1)
  13. return;
  14. int till = len;
  15. till = Math.Min(arg.Length, till);
  16. buffer[offset] = (byte)till;
  17. offset++;
  18. byte[] argEncoded = Server.Encoding.GetBytes(arg);
  19. Array.Copy(argEncoded, 0, buffer, offset, till);
  20. }
  21. public static void WriteStringWithLength(string arg, int offset, byte[] buffer)
  22. {
  23. if (buffer == null)
  24. return;
  25. if (offset > buffer.Length - 1)
  26. return;
  27. int till = buffer.Length - offset;
  28. till = Math.Min(arg.Length, till);
  29. buffer[offset] = (byte)arg.Length;
  30. offset++;
  31. byte[] argEncoded = Server.Encoding.GetBytes(arg);
  32. Array.Copy(argEncoded, 0, buffer, offset, till);
  33. }
  34. public static void WriteString(string arg, int offset, byte[] buffer)
  35. {
  36. if (buffer == null)
  37. return;
  38. if (offset > buffer.Length - 1)
  39. return;
  40. byte[] argEncoded = Server.Encoding.GetBytes(arg);
  41. if (buffer.Length >= offset + arg.Length)
  42. Array.Copy(argEncoded, 0, buffer, offset, arg.Length);
  43. }
  44. /* public static void WriteStringWithLength(string arg, int offset, byte[] buffer)
  45. {
  46. if (buffer == null)
  47. return;
  48. if (offset > buffer.Length - 1)
  49. return;
  50. int till = buffer.Length - offset;
  51. till = Math.Min(arg.Length, till);
  52. buffer[offset] = (byte)arg.Length;
  53. offset++;
  54. ushort i = 0;
  55. while (i < till)
  56. {
  57. buffer[(ushort)(i + offset)] = (byte)arg[i];
  58. i = (ushort)(i + 1);
  59. }
  60. }
  61. public static void WriteString(string arg, int offset, byte[] buffer)
  62. {
  63. if (buffer == null)
  64. return;
  65. if (offset > buffer.Length - 1)
  66. return;
  67. if (buffer.Length >= offset + arg.Length)
  68. {
  69. unsafe
  70. {
  71. #if UNSAFE
  72. fixed (byte* Buffer = buffer)
  73. {
  74. ushort i = 0;
  75. while (i < arg.Length)
  76. {
  77. *((byte*)(Buffer + offset + i)) = (byte)arg[i];
  78. i++;
  79. }
  80. }
  81. #else
  82. ushort i = 0;
  83. while (i < arg.Length)
  84. {
  85. buffer[(ushort)(i + offset)] = (byte)arg[i];
  86. i = (ushort)(i + 1);
  87. }
  88. #endif
  89. }
  90. }
  91. }*/
  92. public static void WriteByte(byte arg, int offset, byte[] buffer)
  93. {
  94. if (buffer == null)
  95. return;
  96. if (offset > buffer.Length - 1)
  97. return;
  98. buffer[offset] = arg;
  99. }
  100. public static void WriteBoolean(bool arg, int offset, byte[] buffer)
  101. {
  102. if (buffer == null)
  103. return;
  104. if (offset > buffer.Length - 1)
  105. return;
  106. WriteByte(arg == true ? (byte)1 : (byte)0, offset, buffer);
  107. }
  108. public static void WriteUInt16(ushort arg, int offset, byte[] buffer)
  109. {
  110. if (buffer == null)
  111. return;
  112. if (offset > buffer.Length - 1)
  113. return;
  114. if (buffer.Length >= offset + sizeof(ushort))
  115. {
  116. unsafe
  117. {
  118. #if UNSAFE
  119. fixed (byte* Buffer = buffer)
  120. *((ushort*)(Buffer + offset)) = arg;
  121. #else
  122. buffer[offset] = (byte)arg;
  123. buffer[offset + 1] = (byte)(arg >> 8);
  124. #endif
  125. }
  126. }
  127. }
  128. public static void WriteUInt32(uint arg, int offset, byte[] buffer)
  129. {
  130. if (buffer == null)
  131. return;
  132. if (offset > buffer.Length - 1)
  133. return;
  134. if (buffer.Length >= offset + sizeof(uint))
  135. {
  136. unsafe
  137. {
  138. #if UNSAFE
  139. fixed (byte* Buffer = buffer)
  140. *((uint*)(Buffer + offset)) = arg;
  141. #else
  142. buffer[offset] = (byte)arg;
  143. buffer[offset + 1] = (byte)(arg >> 8);
  144. buffer[offset + 2] = (byte)(arg >> 16);
  145. buffer[offset + 3] = (byte)(arg >> 24);
  146. #endif
  147. }
  148. }
  149. }
  150. public static unsafe void WriteUInt128(decimal arg, int offset, byte[] Buffer)
  151. {
  152. try
  153. {
  154. fixed (byte* buffer = Buffer)
  155. *((decimal*)(buffer + offset)) = arg;
  156. }
  157. catch (Exception e)
  158. {
  159. Console.WriteLine(e);
  160. }
  161. }
  162. public static void WriteInt32(int arg, int offset, byte[] buffer)
  163. {
  164. if (buffer == null)
  165. return;
  166. if (offset > buffer.Length - 1)
  167. return;
  168. if (buffer.Length >= offset + sizeof(uint))
  169. {
  170. unsafe
  171. {
  172. #if UNSAFE
  173. fixed (byte* Buffer = buffer)
  174. *((int*)(Buffer + offset)) = arg;
  175. #else
  176. buffer[offset] = (byte)(arg);
  177. buffer[offset + 1] = (byte)(arg >> 8);
  178. buffer[offset + 2] = (byte)(arg >> 16);
  179. buffer[offset + 3] = (byte)(arg >> 24);
  180. #endif
  181. }
  182. }
  183. }
  184. public static void WriteUInt64(ulong arg, int offset, byte[] buffer)
  185. {
  186. if (buffer == null)
  187. return;
  188. if (offset > buffer.Length - 1)
  189. return;
  190. if (buffer.Length >= offset + sizeof(ulong))
  191. {
  192. unsafe
  193. {
  194. #if UNSAFE
  195. fixed (byte* Buffer = buffer)
  196. *((ulong*)(Buffer + offset)) = arg;
  197. #else
  198. buffer[offset] = (byte)(arg);
  199. buffer[offset + 1] = (byte)(arg >> 8);
  200. buffer[offset + 2] = (byte)(arg >> 16);
  201. buffer[offset + 3] = (byte)(arg >> 24);
  202. buffer[offset + 4] = (byte)(arg >> 32);
  203. buffer[offset + 5] = (byte)(arg >> 40);
  204. buffer[offset + 6] = (byte)(arg >> 48);
  205. buffer[offset + 7] = (byte)(arg >> 56);
  206. #endif
  207. }
  208. }
  209. }
  210. public static void WriteStringList(List<string> arg, int offset, byte[] buffer)
  211. {
  212. if (arg == null)
  213. return;
  214. if (buffer == null)
  215. return;
  216. if (offset > buffer.Length - 1)
  217. return;
  218. buffer[offset] = (byte)arg.Count;
  219. offset++;
  220. foreach (string str in arg)
  221. {
  222. buffer[offset] = (byte)str.Length;
  223. WriteString(str, offset + 1, buffer);
  224. offset += str.Length + 1;
  225. }
  226. }
  227. public static void WriteStringList(string[] arg, int offset, byte[] buffer)
  228. {
  229. if (arg == null)
  230. return;
  231. if (buffer == null)
  232. return;
  233. if (offset > buffer.Length - 1)
  234. return;
  235. buffer[offset] = (byte)arg.Length;
  236. offset++;
  237. foreach (string str in arg)
  238. {
  239. buffer[offset] = (byte)str.Length;
  240. WriteString(str, offset + 1, buffer);
  241. offset += str.Length + 1;
  242. }
  243. }
  244. public static void String(string arg, int offset, byte[] buffer)
  245. {
  246. if (buffer == null)
  247. return;
  248. if (offset > buffer.Length - 1)
  249. return;
  250. byte[] argEncoded = Server.Encoding.GetBytes(arg);
  251. if (buffer.Length >= offset + arg.Length)
  252. Array.Copy(argEncoded, 0, buffer, offset, arg.Length);
  253. }
  254. /* public static void String(string arg, int offset, byte[] buffer)
  255. {
  256. if (buffer == null)
  257. return;
  258. if (offset > buffer.Length - 1)
  259. return;
  260. if (buffer.Length >= offset + arg.Length)
  261. {
  262. unsafe
  263. {
  264. #if UNSAFE
  265. fixed (byte* Buffer = buffer)
  266. {
  267. ushort i = 0;
  268. while (i < arg.Length)
  269. {
  270. *((byte*)(Buffer + offset + i)) = (byte)arg[i];
  271. i++;
  272. }
  273. }
  274. #else
  275. ushort i = 0;
  276. while (i < arg.Length)
  277. {
  278. buffer[(ushort)(i + offset)] = (byte)arg[i];
  279. i = (ushort)(i + 1);
  280. }
  281. #endif
  282. }
  283. }
  284. }*/
  285. public static void Byte(byte arg, int offset, byte[] buffer)
  286. {
  287. if (buffer == null)
  288. return;
  289. if (offset > buffer.Length - 1)
  290. return;
  291. buffer[offset] = arg;
  292. }
  293. public static void Boolean(bool arg, int offset, byte[] buffer)
  294. {
  295. if (buffer == null)
  296. return;
  297. if (offset > buffer.Length - 1)
  298. return;
  299. WriteByte(arg == true ? (byte)1 : (byte)0, offset, buffer);
  300. }
  301. public static void Ushort(ushort arg, int offset, byte[] buffer)
  302. {
  303. if (buffer == null)
  304. return;
  305. if (offset > buffer.Length - 1)
  306. return;
  307. if (buffer.Length >= offset + sizeof(ushort))
  308. {
  309. unsafe
  310. {
  311. #if UNSAFE
  312. fixed (byte* Buffer = buffer)
  313. {
  314. *((ushort*)(Buffer + offset)) = arg;
  315. }
  316. #else
  317. buffer[offset] = (byte)arg;
  318. buffer[offset + 1] = (byte)(arg >> 8);
  319. #endif
  320. }
  321. }
  322. }
  323. public static void Uint(uint arg, int offset, byte[] buffer)
  324. {
  325. if (buffer == null)
  326. return;
  327. if (offset > buffer.Length - 1)
  328. return;
  329. if (buffer.Length >= offset + sizeof(uint))
  330. {
  331. unsafe
  332. {
  333. #if UNSAFE
  334. fixed (byte* Buffer = buffer)
  335. {
  336. *((uint*)(Buffer + offset)) = arg;
  337. }
  338. #else
  339. buffer[offset] = (byte)arg;
  340. buffer[offset + 1] = (byte)(arg >> 8);
  341. buffer[offset + 2] = (byte)(arg >> 16);
  342. buffer[offset + 3] = (byte)(arg >> 24);
  343. #endif
  344. }
  345. }
  346. }
  347. public static unsafe void Decimal(decimal arg, int offset, byte[] Buffer)
  348. {
  349. try
  350. {
  351. fixed (byte* buffer = Buffer)
  352. {
  353. if (arg.GetType() == typeof(decimal))
  354. {
  355. *((decimal*)(buffer + offset)) = arg;
  356. }
  357. }
  358. }
  359. catch (Exception e)
  360. {
  361. Conquer_Online_Server.Console.WriteLine(e);
  362. }
  363. }
  364. public static void Int(int arg, int offset, byte[] buffer)
  365. {
  366. if (buffer == null)
  367. return;
  368. if (offset > buffer.Length - 1)
  369. return;
  370. if (buffer.Length >= offset + sizeof(uint))
  371. {
  372. unsafe
  373. {
  374. #if UNSAFE
  375. fixed (byte* Buffer = buffer)
  376. {
  377. *((int*)(Buffer + offset)) = arg;
  378. }
  379. #else
  380. buffer[offset] = (byte)(arg);
  381. buffer[offset + 1] = (byte)(arg >> 8);
  382. buffer[offset + 2] = (byte)(arg >> 16);
  383. buffer[offset + 3] = (byte)(arg >> 24);
  384. #endif
  385. }
  386. }
  387. }
  388. public static void Ulong(ulong arg, int offset, byte[] buffer)
  389. {
  390. if (buffer == null)
  391. return;
  392. if (offset > buffer.Length - 1)
  393. return;
  394. if (buffer.Length >= offset + sizeof(ulong))
  395. {
  396. unsafe
  397. {
  398. #if UNSAFE
  399. fixed (byte* Buffer = buffer)
  400. {
  401. *((ulong*)(Buffer + offset)) = arg;
  402. }
  403. #else
  404. buffer[offset] = (byte)(arg);
  405. buffer[offset + 1] = (byte)(arg >> 8);
  406. buffer[offset + 2] = (byte)(arg >> 16);
  407. buffer[offset + 3] = (byte)(arg >> 24);
  408. buffer[offset + 4] = (byte)(arg >> 32);
  409. buffer[offset + 5] = (byte)(arg >> 40);
  410. buffer[offset + 6] = (byte)(arg >> 48);
  411. buffer[offset + 7] = (byte)(arg >> 56);
  412. #endif
  413. }
  414. }
  415. }
  416. public static void WriteUshort(ushort arg, int offset, byte[] buffer)
  417. {
  418. if (buffer == null)
  419. return;
  420. if (offset > buffer.Length - 1)
  421. return;
  422. if (buffer.Length >= offset + sizeof(ushort))
  423. {
  424. unsafe
  425. {
  426. #if UNSAFE
  427. fixed (byte* Buffer = buffer)
  428. {
  429. *((ushort*)(Buffer + offset)) = arg;
  430. }
  431. #else
  432. buffer[offset] = (byte)arg;
  433. buffer[offset + 1] = (byte)(arg >> 8);
  434. #endif
  435. }
  436. }
  437. }
  438. public static void WriteUint(uint arg, int offset, byte[] buffer)
  439. {
  440. if (buffer == null)
  441. return;
  442. if (offset > buffer.Length - 1)
  443. return;
  444. if (buffer.Length >= offset + sizeof(uint))
  445. {
  446. unsafe
  447. {
  448. #if UNSAFE
  449. fixed (byte* Buffer = buffer)
  450. {
  451. *((uint*)(Buffer + offset)) = arg;
  452. }
  453. #else
  454. buffer[offset] = (byte)arg;
  455. buffer[offset + 1] = (byte)(arg >> 8);
  456. buffer[offset + 2] = (byte)(arg >> 16);
  457. buffer[offset + 3] = (byte)(arg >> 24);
  458. #endif
  459. }
  460. }
  461. }
  462. public static void WriteUlong(ulong arg, int offset, byte[] buffer)
  463. {
  464. if (buffer == null)
  465. return;
  466. if (offset > buffer.Length - 1)
  467. return;
  468. if (buffer.Length >= offset + sizeof(ulong))
  469. {
  470. unsafe
  471. {
  472. #if UNSAFE
  473. fixed (byte* Buffer = buffer)
  474. {
  475. *((ulong*)(Buffer + offset)) = arg;
  476. }
  477. #else
  478. buffer[offset] = (byte)(arg);
  479. buffer[offset + 1] = (byte)(arg >> 8);
  480. buffer[offset + 2] = (byte)(arg >> 16);
  481. buffer[offset + 3] = (byte)(arg >> 24);
  482. buffer[offset + 4] = (byte)(arg >> 32);
  483. buffer[offset + 5] = (byte)(arg >> 40);
  484. buffer[offset + 6] = (byte)(arg >> 48);
  485. buffer[offset + 7] = (byte)(arg >> 56);
  486. #endif
  487. }
  488. }
  489. }
  490. #region New Write
  491. public static void Write(string arg, int offset, byte[] buffer)
  492. {
  493. if (buffer == null)
  494. return;
  495. if (offset > buffer.Length - 1)
  496. return;
  497. byte[] argEncoded = Server.Encoding.GetBytes(arg);
  498. if (buffer.Length >= offset + arg.Length)
  499. Array.Copy(argEncoded, 0, buffer, offset, arg.Length);
  500. }
  501. public static void Write(byte arg, int offset, byte[] buffer)
  502. {
  503. if (buffer == null)
  504. return;
  505. if (offset > buffer.Length - 1)
  506. return;
  507. buffer[offset] = arg;
  508. }
  509. public static void Write(bool arg, int offset, byte[] buffer)
  510. {
  511. if (buffer == null)
  512. return;
  513. if (offset > buffer.Length - 1)
  514. return;
  515. WriteByte(arg == true ? (byte)1 : (byte)0, offset, buffer);
  516. }
  517. public static void Write(ushort arg, int offset, byte[] buffer)
  518. {
  519. if (buffer == null)
  520. return;
  521. if (offset > buffer.Length - 1)
  522. return;
  523. if (buffer.Length >= offset + sizeof(ushort))
  524. {
  525. unsafe
  526. {
  527. #if UNSAFE
  528. fixed (byte* Buffer = buffer)
  529. {
  530. *((ushort*)(Buffer + offset)) = arg;
  531. }
  532. #else
  533. buffer[offset] = (byte)arg;
  534. buffer[offset + 1] = (byte)(arg >> 8);
  535. #endif
  536. }
  537. }
  538. }
  539. public static void Write(uint arg, int offset, byte[] buffer)
  540. {
  541. if (buffer == null)
  542. return;
  543. if (offset > buffer.Length - 1)
  544. return;
  545. if (buffer.Length >= offset + sizeof(uint))
  546. {
  547. unsafe
  548. {
  549. #if UNSAFE
  550. fixed (byte* Buffer = buffer)
  551. {
  552. *((uint*)(Buffer + offset)) = arg;
  553. }
  554. #else
  555. buffer[offset] = (byte)arg;
  556. buffer[offset + 1] = (byte)(arg >> 8);
  557. buffer[offset + 2] = (byte)(arg >> 16);
  558. buffer[offset + 3] = (byte)(arg >> 24);
  559. #endif
  560. }
  561. }
  562. }
  563. public static void Write(ulong arg, int offset, byte[] buffer)
  564. {
  565. if (buffer == null)
  566. return;
  567. if (offset > buffer.Length - 1)
  568. return;
  569. if (buffer.Length >= offset + sizeof(ulong))
  570. {
  571. unsafe
  572. {
  573. #if UNSAFE
  574. fixed (byte* Buffer = buffer)
  575. {
  576. *((ulong*)(Buffer + offset)) = arg;
  577. }
  578. #else
  579. buffer[offset] = (byte)(arg);
  580. buffer[offset + 1] = (byte)(arg >> 8);
  581. buffer[offset + 2] = (byte)(arg >> 16);
  582. buffer[offset + 3] = (byte)(arg >> 24);
  583. buffer[offset + 4] = (byte)(arg >> 32);
  584. buffer[offset + 5] = (byte)(arg >> 40);
  585. buffer[offset + 6] = (byte)(arg >> 48);
  586. buffer[offset + 7] = (byte)(arg >> 56);
  587. #endif
  588. }
  589. }
  590. }
  591. #endregion
  592. }
  593. }

comments powered by Disqus