📄 databuffer.cs
字号:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Text;
namespace SMGP3_0
{
class DataBuffer
{
public delegate void ParsePackEventHandler(DataBuffer Sender, SMGPPack Pack);
public delegate void RaiseErrorEventHandler(DataBuffer Sender, Exception Error);
private object Lock = new object();
private Thread MyThread;
private bool RUN = false;
public bool Running
{
get
{
return RUN;
}
}
private byte[] Buffer;
public event ParsePackEventHandler OnParsePack;
public event RaiseErrorEventHandler OnRaiseError;
public DataBuffer()
{
}
public void Fill(byte[] Data)
{
lock (Lock)
{
int OldIndex = Buffer.Length;
Array.Resize(ref Buffer, Buffer.Length + Data.Length);
Array.Copy(Data, 0, Buffer, OldIndex, Data.Length);
}
}
public void Start()
{
Buffer = new byte[0];
if (MyThread == null || !MyThread.IsAlive)
{
RUN = true;
MyThread = new Thread(new ThreadStart(Process));
MyThread.Start();
}
}
public void Stop()
{
RUN = false;
}
private void Process()
{
while (RUN)
{
lock (Lock)
{
if (Buffer.Length > 0)
{
SMGPPack pack;
int Index = 0;
try
{
pack = SMGPPack.CreateInstance(Buffer, ref Index);
}
catch (Exception Err)
{
if (OnRaiseError != null)
OnRaiseError.BeginInvoke(this, Err, null, null);
RUN = false;
break;
}
if (OnParsePack != null)
{
OnParsePack.BeginInvoke(this, pack, null, null);
}
if (pack != null)
{
byte[] Data = new byte[Buffer.Length - Index];
Array.Copy(Buffer, Index, Data, 0, Data.Length);
Buffer = Data;
}
}
}
Thread.Sleep(300);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -