تطبيق C# مُدار خالص لمواصفات Netcode.IO
الهدف من هذا المشروع هو توفير تطبيق مُدار خالص لمواصفات Netcode.IO المشفرة مقابل .NET 3.5 واستخدام صفر ملفات DLL أو أغلفة أصلية لتحقيق أقصى قدر من قابلية النقل. بدلاً من استخدام libsodium مثل التطبيق المرجعي الأصلي للغة C، يستخدم هذا التطبيق نسخة مخصصة من مكتبة التشفير Bouncy Castle. يمكنك العثور على كود المصدر الأصلي هنا: https://github.com/bcgit/bc-csharp
بالإضافة إلى ذلك، فهو مصمم للاستخدام في الألعاب. ولتحقيق هذه الغاية، فقد تم تصميمه من الألف إلى الياء ليكون له أقل تأثير ممكن على مخصصات إجمالي الكربون قدر الإمكان. بالنسبة للجزء الأكبر، يجب ألا ترى أي تأثير على GC من استخدام Netcode.IO.NET على الإطلاق.
معظم واجهة برمجة التطبيقات موجودة في مساحة الاسم NetcodeIO.NET
لإنشاء وبدء خادم جديد:
Server server = new Server (
maxClients , // int maximum number of clients which can connect to this server at one time
publicAddress , port , // string public address and int port clients will connect to
protocolID , // ulong protocol ID shared between clients and server
privateKeyBytes // byte[32] private crypto key shared between backend servers
) ;
server . Start ( ) ; // start the server running
للاستماع لمختلف الفعاليات:
// Called when a client has connected
server . OnClientConnected += clientConnectedHandler ; // void( RemoteClient client )
// Called when a client disconnects
server . OnClientDisconnected += clientDisconnectedHandler ; // void( RemoteClient client )
// Called when a payload has been received from a client
// Note that you should not keep a reference to the payload, as it will be returned to a pool after this call completes.
server . OnClientMessageRecieved += messageReceivedHandler ; // void( RemoteClient client, byte[] payload, int payloadSize )
// Called when the server logs a message
// If you are not using a custom logger, a handler using Console.Write() is sufficient.
server . OnLogMessage += logMessageHandler ; // void( string message, NetcodeLogLevel logLevel )
لإرسال حمولة إلى عميل بعيد متصل بالخادم:
remoteClient . Send ( byte [ ] payload , int payloadSize ) ;
// or:
server . SendPayload ( RemoteClient client , byte [ ] payload , int payloadSize ) ;
لفصل العميل:
server . Disconnect ( RemoteClient client ) ;
للحصول على بيانات المستخدم العشوائية ذات 256 بايت والتي يمكن تمريرها باستخدام رمز الاتصال:
remoteClient . UserData ; // byte[256]
لإيقاف الخادم وفصل أي عملاء:
server . Stop ( ) ;
لإنشاء عميل جديد:
Client client = new Client ( ) ;
للاستماع لمختلف الفعاليات:
// Called when the client's state has changed
// Use this to detect when a client has connected to a server, or has been disconnected from a server, or connection times out, etc.
client . OnStateChanged += clientStateChanged ; // void( ClientState state )
// Called when a payload has been received from the server
// Note that you should not keep a reference to the payload, as it will be returned to a pool after this call completes.
client . OnMessageReceived += messageReceivedHandler ; // void( byte[] payload, int payloadSize )
للاتصال بالخادم باستخدام رمز الاتصال:
client . Connect ( connectToken ) ; // byte[2048] public connect token as returned by a TokenFactory
لإرسال رسالة إلى الخادم عند الاتصال:
client . Send ( byte [ ] payload , int payloadSize ) ;
لفصل العميل:
client . Disconnect ( ) ;
يمكن استخدام TokenFactory لإنشاء رموز الاتصال العامة التي يستخدمها العملاء للاتصال بخوادم الألعاب. لإنشاء TokenFactory جديد:
TokenFactory tokenFactory = new TokenFactory (
protocolID , // must be the same protocol ID as passed to both client and server constructors
privateKey // byte[32], must be the same as the private key passed to the Server constructor
) ;
لإنشاء رمز اتصال عام جديد بحجم 2048 بايت:
tokenFactory . GenerateConnectToken (
addressList , // IPEndPoint[] list of addresses the client can connect to. Must have at least one and no more than 32.
expirySeconds , // in how many seconds will the token expire
serverTimeout , // how long it takes until a connection attempt times out and the client tries the next server.
sequenceNumber , // ulong token sequence number used to uniquely identify a connect token.
clientID , // ulong ID used to uniquely identify this client
userData // byte[], up to 256 bytes of arbitrary user data (available to the server as RemoteClient.UserData)
) ;
Netcode.IO.NET هو منفذ خالص لبروتوكول Netcode.IO - لا أكثر ولا أقل. في جوهره، Netcode.IO هو عبارة عن تجريد قائم على التشفير والاتصال أعلى UDP. وكما هو الحال مع UDP، فهو لا يحتوي على أي ضمانات بشأن الموثوقية. قد لا يتم ترتيب رسائلك، وقد لا يتم ترتيبها. هذه مجرد حقيقة على الإنترنت. ومع ذلك، من شبه المؤكد أن أي لعبة ستحتاج إلى نوع من طبقة الموثوقية. ولتحقيق هذه الغاية، يوفر مشروعي ReliableNetcode.NET طبقة موثوقية غير محددة وسهلة الاستخدام يمكنك استخدامها لإضافة هذه الوظيفة إلى لعبتك.