From 3c35f85432d317061f09c93319108de899469d55 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 31 十月 2019 02:55:34 +0800
Subject: [PATCH] 0312 升星自动购买拍卖行物品

---
 Lua/LuaGameNetSystem.cs |  261 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 245 insertions(+), 16 deletions(-)

diff --git a/Lua/LuaGameNetSystem.cs b/Lua/LuaGameNetSystem.cs
index 9828e4e..5c899c0 100644
--- a/Lua/LuaGameNetSystem.cs
+++ b/Lua/LuaGameNetSystem.cs
@@ -2,64 +2,293 @@
 using System.Collections.Generic;
 using UnityEngine;
 using System;
+using System.Text;
 
+[XLua.LuaCallCSharp]
 public class LuaGameNetPackBase
 {
     public ushort cmd = 0;
+    public ushort combineCmd = 0;
 
     List<byte> sendBytes = new List<byte>();
     Action writeBytesAction;
 
     public void RegistWriteToBytes(Action action)
     {
-
+        writeBytesAction = action;
     }
 
-    public void WriteIntsBytes(uint value, LuaGameNetSystem.NetDataType type)
+    public void WriteShortBytes(ushort value, LuaGameNetSystem.NetDataType type)
     {
+        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)
+    {
+        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)
+    {
+        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, int length)
+    {
+        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++)
+        {
+            WriteShortBytes(values[i], type);
+        }
+    }
+
+    public void WriteIntsWriteLenBytes(int[] values, LuaGameNetSystem.NetDataType type)
+    {
+        for (var i = 0; i < values.Length; 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();
         }
 
+        if (combineCmd != 0)
+        {
+            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());
     }
 
-
-    int readIndex = 0;
+    int readIndex = 2;
     public uint TransUintBytes(byte[] value, LuaGameNetSystem.NetDataType type)
     {
-        readIndex += 4;
-        return BitConverter.ToUInt32(value, readIndex);
+        var length = GetBytesLength(type);
+        var result = 0u;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                result = (uint)value[readIndex];
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                result = (ushort)BitConverter.ToUInt16(value, readIndex);
+                break;
+            case LuaGameNetSystem.NetDataType.DWORD:
+                result = BitConverter.ToUInt32(value, readIndex);
+                break;
+            case LuaGameNetSystem.NetDataType.Int:
+                result = (uint)BitConverter.ToInt32(value, readIndex);
+                break;
+            default:
+                Debug.LogError("璇锋寚瀹氭纭殑绫诲瀷銆�");
+                break;
+        }
+
+        readIndex += length;
+        return result;
+    }
+
+    public int TransIntBytes(byte[] value, LuaGameNetSystem.NetDataType type)
+    {
+        var length = GetBytesLength(type);
+        var result = 0;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                result = (int)value[readIndex];
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                result = (int)BitConverter.ToUInt16(value, readIndex);
+                break;
+            case LuaGameNetSystem.NetDataType.DWORD:
+                result = (int)BitConverter.ToUInt32(value, readIndex);
+                break;
+            case LuaGameNetSystem.NetDataType.Int:
+                result = BitConverter.ToInt32(value, readIndex);
+                break;
+            default:
+                Debug.LogError("璇锋寚瀹氭纭殑绫诲瀷銆�");
+                break;
+        }
+
+        readIndex += length;
+        return result;
     }
 
     public ushort TransUshortBytes(byte[] value, LuaGameNetSystem.NetDataType type)
     {
-        readIndex += 2;
-        return BitConverter.ToUInt16(value, readIndex);
+        var length = GetBytesLength(type);
+        var result = (ushort)0;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                result = (ushort)value[readIndex];
+                readIndex += length;
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                result = BitConverter.ToUInt16(value, readIndex);
+                readIndex += length;
+                break;
+            default:
+                Debug.LogError("璇锋寚瀹氭纭殑绫诲瀷銆�");
+                break;
+        }
+
+        return result;
     }
 
     public byte TransByteBytes(byte[] value, LuaGameNetSystem.NetDataType type)
     {
-        readIndex += 1;
-        return value[readIndex];
+        var result = value[readIndex];
+        readIndex += GetBytesLength(type);
+        return result;
     }
 
-//     public uint[] TransVShortsBytes(byte[] value, LuaGameNetSystem.NetDataType type, int length)
-//     {
-// 
-// 
-//     }
+    static Encoding stringEncoding = Encoding.UTF8;
+    public string TransStringBytes(byte[] value, LuaGameNetSystem.NetDataType type, int length)
+    {
+        if (value.Length < readIndex + length)
+        {
+            DebugEx.LogError("灏佸寘闀垮害涓嶈冻銆�");
+            return string.Empty;
+        }
+        else
+        {
+            var result = stringEncoding.GetString(value, readIndex, length);
+            readIndex += length;
+            return result;
+        }
+    }
 
+    public uint[] TransVShortsBytes(byte[] value, LuaGameNetSystem.NetDataType type, int length)
+    {
+        var array = new uint[length];
+        for (var i = 0; i < length; i++)
+        {
+            switch (type)
+            {
+                case LuaGameNetSystem.NetDataType.BYTE:
+                    array[i] = TransByteBytes(value, type);
+                    break;
+                case LuaGameNetSystem.NetDataType.WORD:
+                    array[i] = TransUshortBytes(value, type);
+                    break;
+                case LuaGameNetSystem.NetDataType.Int:
+                    array[i] = (uint)TransIntBytes(value, type);
+                    break;
+                case LuaGameNetSystem.NetDataType.DWORD:
+                    array[i] = TransUintBytes(value, type);
+                    break;
+                default:
+                    Debug.LogError("璇锋寚瀹氭纭殑绫诲瀷銆�");
+                    break;
+            }
+        }
+
+        return array;
+    }
+
+    static int GetBytesLength(LuaGameNetSystem.NetDataType type)
+    {
+        var step = 1;
+        switch (type)
+        {
+            case LuaGameNetSystem.NetDataType.BYTE:
+                step = 1;
+                break;
+            case LuaGameNetSystem.NetDataType.WORD:
+                step = 2;
+                break;
+            case LuaGameNetSystem.NetDataType.DWORD:
+                step = 4;
+                break;
+            case LuaGameNetSystem.NetDataType.Int:
+                step = 4;
+                break;
+            case LuaGameNetSystem.NetDataType.Double:
+                step = 4;
+                break;
+            default:
+                break;
+        }
+
+        return step;
+    }
 }
 
+[XLua.LuaCallCSharp]
 public class LuaGameNetSystem
 {
 

--
Gitblit v1.8.0