From 6a551bd3eb01ae849cf80ae5b6c8dca3eeba14d8 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期二, 23 十月 2018 16:49:07 +0800
Subject: [PATCH] 3335 更新lua库
---
Lua/LuaGameNetSystem.cs | 198 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 184 insertions(+), 14 deletions(-)
diff --git a/Lua/LuaGameNetSystem.cs b/Lua/LuaGameNetSystem.cs
index 9828e4e..982146c 100644
--- a/Lua/LuaGameNetSystem.cs
+++ b/Lua/LuaGameNetSystem.cs
@@ -2,7 +2,9 @@
using System.Collections.Generic;
using UnityEngine;
using System;
+using System.Text;
+[XLua.LuaCallCSharp]
public class LuaGameNetPackBase
{
public ushort cmd = 0;
@@ -12,12 +14,43 @@
public void RegistWriteToBytes(Action action)
{
-
+ writeBytesAction = action;
}
- public void WriteIntsBytes(uint value, LuaGameNetSystem.NetDataType type)
+ public void WriteShortBytes(ushort value, LuaGameNetSystem.NetDataType type)
{
+ sendBytes.AddRange(BitConverter.GetBytes(value));
+ }
+ public void WriteUintsBytes(uint value, LuaGameNetSystem.NetDataType type)
+ {
+ sendBytes.AddRange(BitConverter.GetBytes(value));
+ }
+
+ public void WriteIntsBytes(int value, LuaGameNetSystem.NetDataType type)
+ {
+ sendBytes.AddRange(BitConverter.GetBytes(value));
+ }
+
+ public void WriteStringBytes(string value, LuaGameNetSystem.NetDataType type)
+ {
+ sendBytes.AddRange(stringEncoding.GetBytes(value));
+ }
+
+ public void WriteShortsWriteLenBytes(ushort[] values, LuaGameNetSystem.NetDataType type)
+ {
+ for (var i = 0; i < values.Length; i++)
+ {
+ sendBytes.AddRange(BitConverter.GetBytes(values[i]));
+ }
+ }
+
+ public void WriteIntsWriteLenBytes(uint[] values, LuaGameNetSystem.NetDataType type)
+ {
+ for (var i = 0; i < values.Length; i++)
+ {
+ sendBytes.AddRange(BitConverter.GetBytes(values[i]));
+ }
}
public void Send()
@@ -29,37 +62,174 @@
writeBytesAction();
}
+ foreach (var item in sendBytes)
+ {
+ Debug.Log(item);
+ }
+
GameNetSystem.Instance.SendInfo(sendBytes.ToArray());
}
-
int readIndex = 0;
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 step = GetBytesLength(type);
+ 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;
+ }
+
+ readIndex += step;
+ }
+
+ 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