Awesome
gnet_csharp
c# connector library for gnet
support TcpSocket and WebSocket
c# project example
public class TestClient
{
public TcpConnection m_Connection;
public TestClient()
{
var connectionConfig = new ConnectionConfig
{
RecvBufferSize = 1024 * 100,
RecvTimeout = 1000,
WriteTimeout = 1000
};
var codec = new ProtoCodec();
connectionConfig.Codec = codec;
m_Connection = new TcpConnection(connectionConfig, 1)
{
Tag = this,
OnConnected = onConnected,
OnClose = onClose,
};
codec.Register(Convert.ToUInt16(pb.CmdTest.CmdHeartBeat), pb.HeartBeatRes.Descriptor);
codec.Register(Convert.ToUInt16(pb.CmdTest.Message), pb.TestMessage.Descriptor);
}
public void Start()
{
m_Connection.Connect("127.0.0.1:10002");
}
public void Stop()
{
m_Connection.Close();
}
private void onConnected(IConnection connection, bool success)
{
Console.WriteLine("onConnected host:"+ m_Connection.GetHostAddress() + " success:"+success);
}
private void onClose(IConnection connection)
{
Console.WriteLine("onClose");
}
public void ProcessPackets()
{
while (true)
{
var packet = m_Connection.PopPacket();
if (packet == null)
{
return;
}
// write your logic code here
Console.WriteLine("recv cmd:"+packet.Command() + " msg:"+packet.Message());
}
}
}
unity example
public class test : MonoBehaviour
{
private TcpConnection m_Connection;
private float m_HeartBeatCounter;
void Start()
{
var connectionConfig = new ConnectionConfig
{
RecvBufferSize = 1024 * 100,
RecvTimeout = 1000,
WriteTimeout = 1000,
HeartBeatInterval = 5
};
var codec = new ProtoCodec();
connectionConfig.Codec = codec;
m_Connection = new TcpConnection(connectionConfig, 1)
{
OnConnected = onConnected,
OnClose = onClose,
};
codec.Register(Convert.ToUInt16(pb.CmdTest.CmdHeartBeat), pb.HeartBeatRes.Descriptor);
codec.Register(Convert.ToUInt16(pb.CmdTest.Message), pb.TestMessage.Descriptor);
}
// Update is called once per frame
void Update()
{
processPackets();
}
void onConnected(IConnection connection, bool success)
{
Debug.LogFormat("onConnected:{0} host:{1}", success, m_Connection.GetHostAddress());
}
void onClose(IConnection connection)
{
Debug.LogFormat("onClode");
}
void processPackets()
{
while (m_Connection.IsConnected())
{
var packet = m_Connection.PopPacket();
if (packet == null)
{
break;
}
// write your logic code here
Debug.LogFormat("recv cmd:{0} msg:{1}", packet.Command(), packet.Message());
}
m_HeartBeatCounter += Time.deltaTime;
if (m_Connection.GetConfig().HeartBeatInterval > 0 &&
m_HeartBeatCounter > m_Connection.GetConfig().HeartBeatInterval)
{
m_HeartBeatCounter = 0;
m_Connection.Send(Convert.ToUInt16(CmdTest.CmdHeartBeat), new HeartBeatReq
{
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(),
}
);
Debug.LogFormat("ping");
}
}
}