ส่วนขยายที่ให้คุณหมุนเซิร์ฟเวอร์ Enet ในแอปพลิเคชัน ASP.NET Core ของคุณ อิงจากผลงานที่ยอดเยี่ยมของ Stanislav Denisov: ENet-CSharp
ตั้งค่าได้ง่าย:
public void ConfigureServices ( IServiceCollection services )
{
// Your other code...
services . AddEnet ( ( configuration ) =>
{
configuration
/* Set the port your Enet Server will listen to. */
. SetPort ( 7001 )
/* Set the polling time, in milliseconds. */
. SetPollingTimeout ( 15 ) ;
/* Add your connection handlers to compose the pipeline. The order matters. */
configuration
. AddConnectionHandler < MyConnectionHandler1 > ( )
. AddConnectionHandler < MyConnectionHandlerN > ( ) ;
/* Add your disconnection handlers to compose the pipeline. The order matters. */
configuration
. AddDisconnectionHandler < MyDisconnectionHandler1 > ( )
. AddDisconnectionHandler < MyDisconnectionHandlerN > ( ) ;
/* Add your timeout handlers to compose the pipeline. The order matters. */
configuration
. AddTimeoutHandler < MyTimeoutHandler1 > ( )
. AddTimeoutHandler < MyTimeoutHandlerN > ( ) ;
/* Add your packet received handlers to compose the pipeline. The order matters. */
configuration
. AddPacketHandler < MyPacketHandler1 > ( )
. AddPacketHandler < MyPacketHandlerN > ( ) ;
} ) ;
// Your other code...
}
คุณสามารถค้นหาตัวอย่างการใช้งานได้ในโฟลเดอร์ MHLab.AspNetCore.Enet.Sample
เป็นเทมเพลต ASP.NET Core Web API แบบคลาสสิกที่มีการเพิ่ม Enet Server
ตัวจัดการการเชื่อมต่อจะถูกทริกเกอร์เมื่อมีการสร้างการเชื่อมต่อไคลเอนต์ใหม่ คุณสามารถสร้างตัวจัดการการเชื่อมต่อของคุณได้ดังนี้:
using ENet ;
using MHLab . AspNetCore . Enet . Handlers ;
using Microsoft . Extensions . Logging ;
public class ConnectionHandler : IConnectionHandler
{
private readonly ILogger < ConnectionHandler > _logger ;
public ConnectionHandler ( ILogger < ConnectionHandler > logger )
{
/* Here in the constructor you can take the full advantage of the
Microsoft Dependency Injection framework. */
_logger = logger ;
}
public void OnConnectedPeer ( Peer peer )
{
_logger . LogDebug ( $ "Client connected - ID: { peer . ID } , IP: { peer . IP } " ) ;
}
}
ตัวจัดการการตัดการเชื่อมต่อจะถูกทริกเกอร์เมื่อไคลเอ็นต์ที่เชื่อมต่ออยู่แล้วตัดการเชื่อมต่ออย่างสวยงาม คุณสามารถสร้างตัวจัดการการขาดการเชื่อมต่อได้ดังนี้:
using ENet ;
using MHLab . AspNetCore . Enet . Handlers ;
using Microsoft . Extensions . Logging ;
public class DisconnectionHandler : IDisconnectionHandler
{
private readonly ILogger < DisconnectionHandler > _logger ;
public DisconnectionHandler ( ILogger < DisconnectionHandler > logger )
{
/* Here in the constructor you can take the full advantage of the
Microsoft Dependency Injection framework. */
_logger = logger ;
}
public void OnDisconnectedPeer ( Peer peer )
{
_logger . Log ( LogLevel . Debug , $ "Client disconnected - ID: { peer . ID } , IP: { peer . IP } " ) ;
}
}
ตัวจัดการการหมดเวลาจะถูกทริกเกอร์เมื่อไคลเอ็นต์ที่เชื่อมต่ออยู่แล้วยกเลิกการเชื่อมต่ออย่างไม่เหมาะสม คุณสามารถสร้างตัวจัดการการหมดเวลาได้ดังนี้:
using ENet ;
using MHLab . AspNetCore . Enet . Handlers ;
using Microsoft . Extensions . Logging ;
public class TimeoutHandler : ITimeoutHandler
{
private readonly ILogger < TimeoutHandler > _logger ;
public TimeoutHandler ( ILogger < TimeoutHandler > logger )
{
/* Here in the constructor you can take the full advantage of the
Microsoft Dependency Injection framework. */
_logger = logger ;
}
public void OnTimeoutPeer ( Peer peer )
{
_logger . Log ( LogLevel . Debug , $ "Client timeout - ID: { peer . ID } , IP: { peer . IP } " ) ;
}
}
ตัวจัดการแพ็คเก็ตจะถูกทริกเกอร์เมื่อได้รับข้อความจากไคลเอนต์ที่เชื่อมต่อ คุณสามารถสร้างตัวจัดการแพ็กเก็ตได้ดังนี้:
using ENet ;
using MHLab . AspNetCore . Enet . Handlers ;
using Microsoft . Extensions . Logging ;
public class PacketHandler : IPacketHandler
{
private readonly ILogger < PacketHandler > _logger ;
public PacketHandler ( ILogger < PacketHandler > logger )
{
/* Here in the constructor you can take the full advantage of the
Microsoft Dependency Injection framework. */
_logger = logger ;
}
public void OnPacketReceived ( Peer peer , byte channelId , Packet packet )
{
_logger . Log ( LogLevel . Debug , $ "Packet received from - ID: { peer . ID } , IP: { peer . IP } , Channel ID: { channelId } , Data length: { packet . Length } " ) ;
}
}