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.

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