You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
4.3 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Networking;
  5. namespace Networking
  6. {
  7. public class LogicProtocols
  8. {
  9. public const short SendLogicList = 200;
  10. public const short SendInventory = 201;
  11. public const short SendRoundTime = 202;
  12. public const short SendNotification = 203;
  13. public const short SendScore = 204;
  14. public class LogicMsg : MessageBase
  15. {
  16. public LogicBlock[] elements;
  17. public LogicMsg() { }
  18. public LogicMsg(LogicBlock[] elements)
  19. {
  20. this.elements = elements;
  21. }
  22. public override void Serialize(NetworkWriter writer)
  23. {
  24. base.Serialize(writer);
  25. writer.Write(elements.Length);
  26. foreach (LogicBlock block in elements)
  27. {
  28. BlockToken token = block.ToToken();
  29. byte[] bytes = Utility.ObjectToByteArray(token);
  30. writer.WriteBytesAndSize(bytes,bytes.Length);
  31. }
  32. }
  33. public override void Deserialize(NetworkReader reader)
  34. {
  35. base.Deserialize(reader);
  36. int count = reader.ReadInt32();
  37. elements = new LogicBlock[count];
  38. for (int i = 0; i < count; i++)
  39. {
  40. BlockToken token = Utility.ByteArrayToObject<BlockToken>(reader.ReadBytesAndSize());
  41. elements[i] = token.ToLogicBlock();
  42. }
  43. }
  44. }
  45. public class InventoryMsg : MessageBase
  46. {
  47. public Inventory.Data[] bagItems;
  48. public InventoryMsg() { }
  49. public InventoryMsg(Inventory inventory)
  50. {
  51. this.bagItems = inventory.BagItems.ToArray();
  52. }
  53. public override void Serialize(NetworkWriter writer)
  54. {
  55. base.Serialize(writer);
  56. writer.Write(bagItems.Length);
  57. foreach(Inventory.Data data in bagItems)
  58. {
  59. BlockToken token = data.element.ToToken();
  60. byte[] bytes = Utility.ObjectToByteArray(token);
  61. writer.WriteBytesAndSize(bytes, bytes.Length);
  62. writer.Write(data.Count);
  63. writer.Write(data.isInfinit);
  64. }
  65. }
  66. public override void Deserialize(NetworkReader reader)
  67. {
  68. base.Deserialize(reader);
  69. int count = reader.ReadInt32();
  70. bagItems = new Inventory.Data[count];
  71. for (int i = 0; i < count; i++)
  72. {
  73. BlockToken token = Utility.ByteArrayToObject<BlockToken>(reader.ReadBytesAndSize());
  74. bagItems[i] = new Inventory.Data();
  75. bagItems[i].element = token.ToLogicBlock();
  76. bagItems[i].Count = reader.ReadInt32();
  77. bagItems[i].isInfinit = reader.ReadBoolean();
  78. }
  79. }
  80. }
  81. public class FloatMsg : MessageBase
  82. {
  83. public float Float;
  84. public FloatMsg() { }
  85. public FloatMsg(float Float)
  86. {
  87. this.Float = Float;
  88. }
  89. public override void Serialize(NetworkWriter writer)
  90. {
  91. base.Serialize(writer);
  92. writer.Write(Float);
  93. }
  94. public override void Deserialize(NetworkReader reader)
  95. {
  96. base.Deserialize(reader);
  97. Float = reader.ReadSingle();
  98. }
  99. }
  100. public class StringMsg : MessageBase
  101. {
  102. public float String;
  103. public StringMsg() { }
  104. public StringMsg(float String)
  105. {
  106. this.String = String;
  107. }
  108. public override void Serialize(NetworkWriter writer)
  109. {
  110. base.Serialize(writer);
  111. writer.Write(String);
  112. }
  113. public override void Deserialize(NetworkReader reader)
  114. {
  115. base.Deserialize(reader);
  116. String = reader.ReadSingle();
  117. }
  118. }
  119. }
  120. }