NET - Message.cs - 解析/拼合数据工具
public class Message {
private byte[] data = new byte[1024];
private int startIndex = 0;//我们存取了多少个字节的数据在数组里面
public byte[] Data {get { return data; }}
public int StartIndex{get { return startIndex; }}
public int RemainSize{get { return data.Length - startIndex; }}
/// 解析数据或者叫做读取数据
public void ReadMessage(int newDataAmount, Action<ActionCode, string> processDataCallback) {}
/// 打包数据
public static byte[] PackData(请求码,动作码, 数据){}
}
public class Message {
private byte[] data = new byte[1024];
private int startIndex = 0;//我们存取了多少个字节的数据在数组里面
public byte[] Data {get { return data; }}
public int StartIndex{get { return startIndex; }}
public int RemainSize{get { return data.Length - startIndex; }}
/// 解析数据或者叫做读取数据
public void ReadMessage(int newDataAmount, Action<ActionCode, string> processDataCallback) {}
/// 打包数据
public static byte[] PackData(RequestCode requestData,ActionCode actionCode, string data){}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Common;
using System.Text;
using System.Linq;
public class Message {
private byte[] data = new byte[1024];
private int startIndex = 0;//我们存取了多少个字节的数据在数组里面
//public void AddCount(int count)
//{
// startIndex += count;
//}
public byte[] Data
{
get { return data; }
}
public int StartIndex
{
get { return startIndex; }
}
public int RemainSize
{
get { return data.Length - startIndex; }
}
/// <summary>
/// 解析数据或者叫做读取数据
/// </summary>
public void ReadMessage(int newDataAmount, Action<ActionCode, string> processDataCallback)
{
startIndex += newDataAmount;
while (true)
{
if (startIndex <= 4) return;
int count = BitConverter.ToInt32(data, 0);
if ((startIndex - 4) >= count)
{
//Console.WriteLine(startIndex);
//Console.WriteLine(count);
//string s = Encoding.UTF8.GetString(data, 4, count);
//Console.WriteLine("解析出来一条数据:" + s);
ActionCode actionCode = (ActionCode)BitConverter.ToInt32(data, 4);
string s = Encoding.UTF8.GetString(data, 8, count - 4);
processDataCallback(actionCode, s);
Array.Copy(data, count + 4, data, 0, startIndex - 4 - count);
startIndex -= (count + 4);
}
else
{
break;
}
}
}
//public static byte[] PackData(ActionCode actionCode, string data)
//{
// byte[] requestCodeBytes = BitConverter.GetBytes((int)actionCode);
// byte[] dataBytes = Encoding.UTF8.GetBytes(data);
// int dataAmount = requestCodeBytes.Length + dataBytes.Length;
// byte[] dataAmountBytes = BitConverter.GetBytes(dataAmount);
// byte[] newBytes = dataAmountBytes.Concat(requestCodeBytes).ToArray<byte>();//Concat(dataBytes);
// return newBytes.Concat(dataBytes).ToArray<byte>();
//}
/// <summary>
/// 打包数据
/// </summary>
public static byte[] PackData(RequestCode requestData,ActionCode actionCode, string data)
{
byte[] requestCodeBytes = BitConverter.GetBytes((int)requestData);
byte[] actionCodeBytes = BitConverter.GetBytes((int)actionCode);
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
int dataAmount = requestCodeBytes.Length + dataBytes.Length + actionCodeBytes.Length;
byte[] dataAmountBytes = BitConverter.GetBytes(dataAmount);
//byte[] newBytes = dataAmountBytes.Concat(requestCodeBytes).ToArray<byte>();//Concat(dataBytes);
//return newBytes.Concat(dataBytes).ToArray<byte>();
return dataAmountBytes.Concat(requestCodeBytes).ToArray<byte>()
.Concat(actionCodeBytes).ToArray<byte>()
.Concat(dataBytes).ToArray<byte>();
}
}