ENet-CSharp Quickstart Examples
A server code example:
using (Host server = new Host()) {
Address address = new Address();
address.Port = port;
server.Create(address, maxClients);
Event netEvent;
while (!Console.KeyAvailable) {
bool polled = false;
while (!polled) {
if (server.CheckEvents(out netEvent) <= 0) {
if (server.Service(15, out netEvent) <= 0)
break;
polled = true;
}
switch (netEvent.Type) {
case EventType.None:
break;
case EventType.Connect:
Console.WriteLine($"Client connected - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}");
break;
case EventType.Disconnect:
Console.WriteLine($"Client disconnected - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}");
break;
case EventType.Timeout:
Console.WriteLine($"Client timeout - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}");
break;
case EventType.Receive:
Console.WriteLine($"Packet received from peer ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}, Channel ID: {netEvent.ChannelID}, Data length: {netEvent.Packet.Length}");
netEvent.Packet.Dispose();
break;
}
}
}
server.Flush();
}
A client code sample:
using (Host client = new Host()) {
Address address = new Address();
address.SetHost(ip);
address.Port = port;
client.Create();
Peer peer = client.Connect(address);
Event netEvent;
while (!Console.KeyAvailable) {
bool polled = false;
while (!polled) {
if (client.CheckEvents(out netEvent) <= 0) {
if (client.Service(15, out netEvent) <= 0)
break;
polled = true;
}
switch (netEvent.Type) {
case EventType.None:
break;
case EventType.Connect:
Console.WriteLine("Client connected to server");
break;
case EventType.Disconnect:
Console.WriteLine("Client disconnected from server");
break;
case EventType.Timeout:
Console.WriteLine("Client connection timeout");
break;
case EventType.Receive:
Console.WriteLine($"Packet received from server - Channel ID: {netEvent.ChannelID}, Data length: {netEvent.Packet.Length}");
netEvent.Packet.Dispose();
break;
}
}
}
client.Flush();
}
Create and send a new packet:
Packet packet = default(Packet);
byte[] data = new byte[64];
packet.Create(data);
peer.Send(channelID, ref packet);
Copy payload from a packet:
byte[] buffer = new byte[1024];
netEvent.Packet.CopyTo(buffer);
(Pro-tier) Using a custom memory allocator:
AllocCallback OnMemoryAllocate = (size) => {
return Marshal.AllocHGlobal(size);
};
FreeCallback OnMemoryFree = (memory) => {
Marshal.FreeHGlobal(memory);
};
NoMemoryCallback OnNoMemory = () => {
throw new OutOfMemoryException();
};
Callbacks callbacks = new Callbacks(OnMemoryAllocate, OnMemoryFree, OnNoMemory);
if (ENet.Library.Initialize(callbacks))
Console.WriteLine("ENet successfully initialized using a custom memory allocator");