提交 303e3c0b 编写于 作者: T tanghai

增加TBuffer类,做网络缓冲区,接下来开发网络层

上级 f54e3ed7
using System.Collections.Generic;
using Common.Base;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace Model
{
public class MessageComponent
{
public MessageComponent()
{
}
}
}
\ No newline at end of file
using Common.Event;
namespace Model
{
/// <summary>
/// 搭配EventComponent用来分发消息
/// </summary>
public class MessageAttribute: AEventAttribute
{
public MessageAttribute(int type): base(type)
{
}
}
}
......@@ -52,11 +52,13 @@
<Compile Include="BehaviorTree\Node.cs" />
<Compile Include="BehaviorTree\NodeAttribute.cs" />
<Compile Include="Buff.cs" />
<Compile Include="Component\MessageComponent.cs" />
<Compile Include="Component\BuffComponent.cs" />
<Compile Include="Component\ConfigComponent.cs" />
<Compile Include="Component\EventComponent.cs" />
<Compile Include="Config\UnitConfig.cs" />
<Compile Include="Config\BuffConfig.cs" />
<Compile Include="MessageAttribute.cs" />
<Compile Include="FactoryAttribute.cs" />
<Compile Include="Component\FactoryComponent.cs" />
<Compile Include="IAssemblyLoader.cs" />
......
using System;
using System.Collections.Generic;
namespace TNet
{
public class TBuffer
{
public const int chunkSize = 8096;
private LinkedList<byte[]> buffer = new LinkedList<byte[]>();
private int writeIndex;
private int readIndex;
public int Count
{
get
{
if (buffer.Count == 0)
{
return 0;
}
return (buffer.Count - 1) * chunkSize + writeIndex - readIndex;
}
}
public byte[] ReadFrom(int n)
{
if (this.Count < n || n <= 0)
{
throw new Exception(string.Format("buffer size < n, buffer: {0} n: {1}", this.Count, n));
}
byte[] bytes = new byte[n];
int alreadyCopyCount = n;
while (alreadyCopyCount < n)
{
if (chunkSize - readIndex > n - alreadyCopyCount)
{
Array.Copy(buffer.First.Value, readIndex, bytes, alreadyCopyCount, n - alreadyCopyCount);
readIndex += n - alreadyCopyCount;
alreadyCopyCount = n;
}
else
{
Array.Copy(buffer.First.Value, readIndex, bytes, alreadyCopyCount, chunkSize - readIndex);
alreadyCopyCount += chunkSize - readIndex;
readIndex = 0;
this.buffer.RemoveFirst();
}
}
return bytes;
}
public void WriteTo(byte[] bytes)
{
int alreadyCopyCount = 0;
while (alreadyCopyCount < bytes.Length)
{
if (writeIndex == 0)
{
this.buffer.AddLast(new byte[chunkSize]);
}
if (chunkSize - writeIndex > alreadyCopyCount)
{
Array.Copy(bytes, alreadyCopyCount, buffer.Last.Value, writeIndex, alreadyCopyCount);
writeIndex += alreadyCopyCount;
alreadyCopyCount = 0;
}
else
{
Array.Copy(bytes, alreadyCopyCount, buffer.Last.Value, writeIndex, chunkSize - writeIndex);
alreadyCopyCount -= chunkSize - writeIndex;
writeIndex = 0;
}
}
}
}
}
......@@ -41,6 +41,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TBuffer.cs" />
<Compile Include="TcpAcceptor.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册