From 930ba67b9f3e4b099f20574319b5d04c2e429552 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期二, 23 十月 2018 19:55:36 +0800
Subject: [PATCH] 3335 更新lua库

---
 Lua/LuaGameNetSystem.cs |   84 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 73 insertions(+), 11 deletions(-)

diff --git a/Lua/LuaGameNetSystem.cs b/Lua/LuaGameNetSystem.cs
index 982146c..a3cbf72 100644
--- a/Lua/LuaGameNetSystem.cs
+++ b/Lua/LuaGameNetSystem.cs
@@ -8,6 +8,7 @@
 public class LuaGameNetPackBase
 {
     public ushort cmd = 0;
+    public ushort combineCmd = 0;
 
     List<byte> sendBytes = new List<byte>();
     Action writeBytesAction;
@@ -19,52 +20,113 @@
 
     public void WriteShortBytes(ushort value, LuaGameNetSystem.NetDataType type)
     {
-        sendBytes.AddRange(BitConverter.GetBytes(value));
+        byte[] bytes;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                bytes = new byte[1];
+                bytes[0] = (byte)(value & 0xFF);
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                bytes = BitConverter.GetBytes((short)value);
+                break;
+            default:
+                bytes = BitConverter.GetBytes((int)value);
+                break;
+        }
+        sendBytes.AddRange(bytes);
     }
 
     public void WriteUintsBytes(uint value, LuaGameNetSystem.NetDataType type)
     {
-        sendBytes.AddRange(BitConverter.GetBytes(value));
+        byte[] bytes;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                bytes = new byte[1];
+                bytes[0] = (byte)(value & 0xFF);
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                bytes = BitConverter.GetBytes((short)value);
+                break;
+            default:
+                bytes = BitConverter.GetBytes((int)value);
+                break;
+        }
+        sendBytes.AddRange(bytes);
     }
 
     public void WriteIntsBytes(int value, LuaGameNetSystem.NetDataType type)
     {
-        sendBytes.AddRange(BitConverter.GetBytes(value));
+        byte[] bytes;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                bytes = new byte[1];
+                bytes[0] = (byte)(value & 0xFF);
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                bytes = BitConverter.GetBytes((short)value);
+                break;
+            default:
+                bytes = BitConverter.GetBytes((int)value);
+                break;
+        }
+        sendBytes.AddRange(bytes);
     }
 
-    public void WriteStringBytes(string value, LuaGameNetSystem.NetDataType type)
+    public void WriteStringBytes(string value, LuaGameNetSystem.NetDataType type, int length)
     {
-        sendBytes.AddRange(stringEncoding.GetBytes(value));
+        var bytes = stringEncoding.GetBytes(value);
+        if (bytes.Length != length)
+        {
+            Array.Resize(ref bytes, length);
+        }
+
+        sendBytes.AddRange(bytes);
     }
 
     public void WriteShortsWriteLenBytes(ushort[] values, LuaGameNetSystem.NetDataType type)
     {
         for (var i = 0; i < values.Length; i++)
         {
-            sendBytes.AddRange(BitConverter.GetBytes(values[i]));
+            WriteShortBytes(values[i], type);
         }
     }
 
-    public void WriteIntsWriteLenBytes(uint[] values, LuaGameNetSystem.NetDataType type)
+    public void WriteIntsWriteLenBytes(int[] values, LuaGameNetSystem.NetDataType type)
     {
         for (var i = 0; i < values.Length; i++)
         {
-            sendBytes.AddRange(BitConverter.GetBytes(values[i]));
+            WriteIntsBytes(values[i], type);
+        }
+    }
+
+    public void WriteUintsWriteLenBytes(uint[] values, LuaGameNetSystem.NetDataType type)
+    {
+        for (var i = 0; i < values.Length; i++)
+        {
+            WriteUintsBytes(values[i], type);
         }
     }
 
     public void Send()
     {
-        sendBytes.AddRange(BitConverter.GetBytes(cmd));
+        sendBytes.Add((byte)((cmd & 0xFF00) >> 8));
+        sendBytes.Add((byte)(cmd & 0xFF));
 
         if (writeBytesAction != null)
         {
             writeBytesAction();
         }
 
-        foreach (var item in sendBytes)
+        if (combineCmd != 0)
         {
-            Debug.Log(item);
+            var lengthBytes = BitConverter.GetBytes((ushort)sendBytes.Count);
+            sendBytes.Insert(0, lengthBytes[1]);
+            sendBytes.Insert(0, lengthBytes[0]);
+            sendBytes.Insert(0, (byte)(combineCmd & 0xFF));
+            sendBytes.Insert(0, (byte)((combineCmd & 0xFF00) >> 8));
         }
 
         GameNetSystem.Instance.SendInfo(sendBytes.ToArray());

--
Gitblit v1.8.0