يوفر هذا المستودع تجريدًا مُدارًا لـ C# لمكتبة GameNetworkingSockets التي يتم إنشاؤها وصيانتها بواسطة Valve Software. ستحتاج إلى إنشاء المكتبة الأصلية بكل التبعيات المطلوبة قبل البدء.
يتم تحديث المشروع وفقًا لإصدارات المكتبة الأصلية.
يمكن إنشاء تجميع مُدار باستخدام أي منصة ترجمة متاحة تدعم الإصدار C# 3.0 أو أعلى.
حدد VALVESOCKETS_SPAN
لتمكين دعم Span. من فضلك، اتبع هذه الخطوات لتمكين الوصول السريع إلى كتل الذاكرة الأصلية وتحسين الأداء.
قبل البدء في العمل، يجب تهيئة المكتبة باستخدام Valve.Sockets.Library.Initialize();
وظيفة.
بعد الانتهاء من العمل، قم بإلغاء تهيئة المكتبة باستخدام Valve.Sockets.Library.Deinitialize();
وظيفة.
خادم NetworkingSockets = جديد NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback condition = (ref StatusInfo info) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connecting:server.AcceptConnection(info.connection);server.SetConnectionPollGroup(pollGroup, info.connection);break;case ConnectionState.Connected:Console.WriteLine("العميل متصل - المعرف: " + info.connection + "، IP : " + info.connectionInfo.address.GetIP());break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server.CloseConnection(info.connection);Console.WriteLine("تم قطع اتصال العميل - المعرف: " + info.connection + "، IP: " + info.connectionInfo.address.GetIP()) ;break;}};utils.SetStatusCallback(status);عنوان العنوان = جديد Address();address.SetAddress("::0", port);uint استمعSocket = server.CreateListenSocket(ref عنوان);#if VALVESOCKETS_SPANMessageCallback message = (in NetworkingMessage netMessage) => {Console.WriteLine("تم استلام الرسالة من - المعرف: " + netMessage.connection + "، معرف القناة: " + netMessage.channel + "، طول البيانات: " + netMessage. length)؛}؛#else const int maxMessages = 20;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {server.RunCallbacks( ); #if VALVESOCKETS_SPANserver.ReceiveMessagesOnPollGroup(pollGroup, message, 20); #else int netMessagesCount = server.ReceiveMessagesOnPollGroup(pollGroup, netMessages, maxMessages);if (netMessagesCount > 0) {for (int i = 0; i < netMessagesCount; i++) {ref NetworkingMessage netMessage = ref netMessages[i];Console.WriteLine("الرسالة المستلمة من - المعرف: " + netMessage.connection + "، معرف القناة: " + netMessage.channel + "، طول البيانات: " + netMessage.length);netMessage.Destroy() ;}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
عميل NetworkingSockets = جديد NetworkingSockets();اتصال uint = 0;StatusCallback condition = (ref StatusInfo info) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" العميل متصل بالخادم - المعرف: " + اتصال)؛ فاصل؛ حالة ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("تم قطع اتصال العميل بالخادم");break;}};utils.SetStatusCallback(status);عنوان العنوان = عنوان جديد();address.SetAddress(":: 1"، المنفذ)؛ الاتصال = client.Connect(عنوان المرجع)؛#if VALVESOCKETS_SPANMessageCallback message = (في NetworkingMessage netMessage) => {Console.WriteLine("الرسالة المستلمة من الخادم - معرف القناة: " + netMessage.channel + "، طول البيانات: " + netMessage. length)؛};#else const int maxMessages = 20;NetworkingMessage [] netMessages = new NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection(connection, message, 20); #else int netMessagesCount = client.ReceiveMessagesOnConnection(connection, netMessages, maxMessages);if (netMessagesCount > 0) {for (int i = 0; i < netMessagesCount; i++) {ref NetworkingMessage netMessage = ref netMessages[i];Console.WriteLine("الرسالة المستلمة من الخادم - معرف القناة: " + netMessage.channel + "، طول البيانات: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
byte[] data = new byte[64];sockets.SendMessageToConnection(connection, data);
byte[] buffer = new byte[1024];netMessage.CopyTo(buffer);
DebugCallback debug = (type, message) => {Console.WriteLine("Debug - Type: " + type + ", الرسالة: " + message);};NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything) ، تصحيح)؛
الاستخدام هو نفسه تقريبًا كما هو الحال في بيئة .NET، باستثناء أنه يجب استبدال وظائف وحدة التحكم بالوظائف التي توفرها Unity. إذا كان سيتم استدعاء NetworkingSockets.RunCallbacks()
في حلقة لعبة، فاحتفظ بتشغيل Unity في الخلفية من خلال تمكين الخيار المناسب في إعدادات المشغل.
تعريفات العلامات الخاصة بوظيفة NetworkingSockets.SendMessageToConnection()
:
SendFlags.Unreliable
غير موثوق به، تسليم الرسالة غير مضمون، قد يتم تسليم الرسالة خارج الترتيب.
SendFlags.Reliable
أمر موثوق به، ويجب أن يتم استلام الرسالة عن طريق الاتصال المستهدف ويجب إجراء محاولات إعادة الإرسال حتى يتم تسليم الرسالة.
SendFlags.NoNagle
لن يتم تجميع الرسالة مع رسائل أخرى خلال جهاز ضبط الوقت.
لن يتم تخزين الرسالة SendFlags.NoDelay
مؤقتًا إذا لم يكن من الممكن إرسالها بسرعة نسبيًا.
تعريفات نوع الهوية لبنية NetworkingIdentity
:
IdentityType.Invalid
غير معروف أو غير صالح.
IdentityType.SteamID
معرف البخار.
IdentityType.IPAddress
عنوان IPv4/IPv6.
تعريفات حالات الاتصال لحقل ConnectionInfo.state
:
ConnectionState.None
حالة وهمية، الاتصال غير موجود أو تم إغلاقه بالفعل.
ConnectionState.Connecting
قيد التقدم لإنشاء اتصال تم بدؤه بواسطة وظيفة NetworkingSockets.Connect()
.
ConnectionState.FindingRoute
إذا قبل الخادم الاتصال، فسيتحول هذا الاتصال إلى حالة الالتقاء، ولكن المسار من طرف إلى طرف لم يتم إنشاؤه بعد (من خلال شبكة الترحيل).
ConnectionState.Connected
اكتمل طلب الاتصال الذي بدأته وظيفة NetworkingSockets.Connect()
.
ConnectionState.ClosedByPeer
تم إغلاق الاتصال بواسطة النظير، ولكن لم يتم إغلاقه محليًا. إذا كانت هناك أية رسائل في قائمة الانتظار الواردة، فيمكن استردادها. بخلاف ذلك، لا يمكن فعل أي شيء بالاتصال باستثناء إغلاقه باستخدام الدالة NetworkingSockets.CloseConnection()
. لا يزال الاتصال موجودًا من منظور واجهة برمجة التطبيقات (API) ويجب إغلاقه لتحرير الموارد.
ConnectionState.ProblemDetectedLocally
تم اكتشاف انقطاع في الاتصال محليًا. ستفشل محاولات إرسال المزيد من الرسائل. أي رسائل مستلمة متبقية في قائمة الانتظار متاحة. لا يزال الاتصال موجودًا من منظور واجهة برمجة التطبيقات (API) ويجب إغلاقه لتحرير الموارد.
تعريفات نطاقات التكوين:
ConfigurationScope.Global
ConfigurationScope.SocketsInterface
ConfigurationScope.ListenSocket
ConfigurationScope.Connection
تعريفات أنواع بيانات التكوين:
ConfigurationDataType.Int32
ConfigurationDataType.Int64
ConfigurationDataType.Float
ConfigurationDataType.String
ConfigurationDataType.FunctionPtr
تعريفات قيم التكوين:
ConfigurationValue.Invalid
ConfigurationValue.FakePacketLossSend
ConfigurationValue.FakePacketLossRecv
ConfigurationValue.FakePacketLagSend
ConfigurationValue.FakePacketLagRecv
ConfigurationValue.FakePacketReorderSend
ConfigurationValue.FakePacketReorderRecv
ConfigurationValue.FakePacketReorderTime
ConfigurationValue.FakePacketDupSend
ConfigurationValue.FakePacketDupRecv
ConfigurationValue.FakePacketDupTimeMax
ConfigurationValue.TimeoutInitial
ConfigurationValue.TimeoutConnected
ConfigurationValue.SendBufferSize
ConfigurationValue.SendRateMin
ConfigurationValue.SendRateMax
ConfigurationValue.NagleTime
ConfigurationValue.IPAllowWithoutAuth
ConfigurationValue.MTUPacketSize
ConfigurationValue.MTUDataSize
ConfigurationValue.Unencrypted
ConfigurationValue.EnumerateDevVars
ConfigurationValue.SymmetricConnect
ConfigurationValue.LocalVirtualPort
ConfigurationValue.ConnectionStatusChanged
ConfigurationValue.AuthStatusChanged
ConfigurationValue.RelayNetworkStatusChanged
ConfigurationValue.MessagesSessionRequest
ConfigurationValue.MessagesSessionFailed
ConfigurationValue.P2PSTUNServerList
ConfigurationValue.P2PTransportICEEnable
ConfigurationValue.P2PTransportICEPenalty
ConfigurationValue.P2PTransportSDRPenalty
ConfigurationValue.SDRClientConsecutitivePingTimeoutsFailInitial
ConfigurationValue.SDRClientConsecutitivePingTimeoutsFail
ConfigurationValue.SDRClientMinPingsBeforePingAccurate
ConfigurationValue.SDRClientSingleSocket
ConfigurationValue.SDRClientForceRelayCluster
ConfigurationValue.SDRClientDebugTicketAddress
ConfigurationValue.SDRClientForceProxyAddr
ConfigurationValue.SDRClientFakeClusterPing
ConfigurationValue.LogLevelAckRTT
ConfigurationValue.LogLevelPacketDecode
ConfigurationValue.LogLevelMessage
ConfigurationValue.LogLevelPacketGaps
ConfigurationValue.LogLevelP2PRendezvous
ConfigurationValue.LogLevelSDRRelayPings
تعريفات نتائج قيمة التكوين:
ConfigurationValueResult.BadValue
ConfigurationValueResult.BadScopeObject
ConfigurationValueResult.BufferTooSmall
ConfigurationValueResult.OK
ConfigurationValueResult.OKInherited
تعريفات أنواع التصحيح:
DebugType.None
DebugType.Bug
DebugType.Error
DebugType.Important
DebugType.Warning
DebugType.Message
DebugType.Verbose
DebugType.Debug
DebugType.Everything
تعريفات نتيجة العملية:
Result.OK
جيد.
Result.Fail
فشل عام.
Result.NoConnection
فشل NoConnection في الاتصال بالشبكة.
Result.InvalidParam
المعلمة غير صحيحة.
الكائن الذي تم استدعاؤه بواسطة Result.InvalidState
كان في حالة غير صالحة.
Result.Ignored
الهدف الذي تم تجاهله هو تجاهل المرسل.
يوفر لكل أحداث المقبس.
يُعلمك StatusCallback(ref StatusInfo info)
عندما تقوم آلية الإرسال الموجودة على مأخذ توصيل الاستماع بإرجاع حالة الاتصال. يجب الحفاظ على الإشارة إلى المفوض من تجميع البيانات المهملة.
يوفر لكل أحداث التطبيق.
يقوم DebugCallback(DebugType type, string message)
بإعلامك عند ظهور معلومات تصحيح الأخطاء بالتوضيح المطلوب. يجب الحفاظ على الإشارة إلى المفوض من تجميع البيانات المهملة.
يحتوي على بيانات منظمة بعنوان IP ورقم المنفذ.
عنوان IP Address.ip
بالبايت.
Address.port
المنفذ.
يتحقق Address.IsLocalHost
مما إذا كانت الهوية مضيفًا محليًا.
يحصل Address.GetIP()
على عنوان IP في نموذج قابل للطباعة.
يقوم Address.SetLocalHost(ushort port)
بتعيين المضيف المحلي بمنفذ محدد.
Address.SetAddress(string ip, ushort port)
بتعيين عنوان IP (IPv4/IPv6) بمنفذ محدد.
Address.Equals(Address other)
يحدد المساواة في العناوين.
يحتوي على بيانات منظمة مع التكوين.
Configuration.value
نوع من القيمة الموضحة في تعداد ConfigurationValue
.
Configuration.dataType
هو نوع من البيانات الموضحة في تعداد ConfigurationDataType
.
Configuration.data
اتحاد بيانات التكوين.
يحتوي على بيانات منظمة مع حالة الاتصال.
معرف اتصال StatusInfo.connection
.
StatusInfo.connectionInfo
هي في الأساس بنية ConnectionInfo
مع البيانات المنظمة.
يحتوي على بيانات منظمة مع معلومات الاتصال.
معرف ConnectionInfo.identity
لنقطة النهاية.
ConnectionInfo.userData
البيانات التي يوفرها المستخدم والتي يتم تعيينها باستخدام وظيفة NetworkingSockets.SetConnectionUserData()
.
ConnectionInfo.listenSocket
مقبس الاستماع لهذا الاتصال.
ConnectionInfo.address
هو العنوان البعيد لنقطة النهاية.
ConnectionInfo.state
حالة عالية المستوى للاتصال الموضحة في تعداد ConnectionState
.
ConnectionInfo.endReason
هو السبب الأساسي لإنهاء الاتصال أو حدوث مشكلة.
شرح ConnectionInfo.endDebug
في نموذج يمكن قراءته من قبل الإنسان لإنهاء الاتصال أو المشكلة. وهذا مخصص لأغراض تصحيح الأخطاء التشخيصية فقط، وليس للعرض للمستخدمين. قد تحتوي على بعض التفاصيل الخاصة بالمشكلة.
يتضمن وصف تصحيح ConnectionInfo.connectionDescription
مقبض الاتصال ونوع الاتصال ومعلومات النظير.
يحتوي على بيانات منظمة مع حالة الاتصال للطلبات المتكررة.
ConnectionStatus.state
حالة عالية المستوى للاتصال الموضحة في تعداد ConnectionState
.
ConnectionStatus.ping
اختبار الاتصال الحالي بالمللي ثانية.
يتم قياس جودة الاتصال ConnectionStatus.connectionQualityLocal
محليًا (النسبة المئوية للحزم التي يتم تسليمها من طرف إلى طرف بالترتيب).
ConnectionStatus.connectionQualityRemote
معدل نجاح تسليم الحزمة كما لوحظ من المضيف البعيد.
ConnectionStatus.outPacketsPerSecond
معدلات الحزم الصادرة الحالية من التاريخ الحديث.
ConnectionStatus.outBytesPerSecond
معدلات البيانات الصادرة الحالية من التاريخ الحديث.
ConnectionStatus.inPacketsPerSecond
معدلات الحزم الواردة الحالية من التاريخ الحديث.
ConnectionStatus.inBytesPerSecond
معدلات البيانات الواردة الحالية من التاريخ الحديث.
ConnectionStatus.sendRateBytesPerSecond
هو المعدل المقدر الذي يمكن من خلاله إرسال البيانات إلى النظير. يمكن أن تكون أعلى بكثير من ConnectionStatus.outBytesPerSecond
، مما يعني أن سعة القناة أعلى من البيانات المرسلة.
ConnectionStatus.pendingUnreliable
عدد غير موثوق به من وحدات البايت المعلقة ليتم إرسالها بشكل غير موثوق. هذه هي البيانات التي تم طلب إرسالها مؤخرًا ولكن لم يتم إرسالها فعليًا بعد.
ConnectionStatus.pendingReliable
عدد وحدات البايت المعلقة ليتم إرسالها بشكل موثوق. يتضمن الرقم الموثوق به أيضًا البيانات التي تم وضعها مسبقًا على السلك ولكن تمت جدولة إعادة إرسالها الآن. وبالتالي، من الممكن ملاحظة زيادة البايتات بين فحصين، حتى لو لم يتم إجراء أي استدعاءات لإرسال بيانات موثوقة بين عمليات التحقق. ستظهر البيانات التي تنتظر تأخير Nagle في هذه الأرقام.
ConnectionStatus.sentUnackedReliable
عدد موثوق من وحدات البايت من البيانات الموثوقة التي تم وضعها عبر السلك، ولكن لم يتم استلام إقرار بشأنها بعد، وبالتالي قد يلزم إعادة إرسالها.
يحتوي على بيانات منظمة لهوية الشبكة.
NetworkingIdentity.type
وصف لهوية الشبكة.
يتحقق NetworkingIdentity.IsInvalid
مما إذا كانت الهوية من النوع غير الصالح.
يحصل NetworkingIdentity.GetSteamID()
على معرف Steam.
يقوم NetworkingIdentity.SetSteamID(ulong steamID)
بتعيين معرف Steam.
يحتوي على بيانات منظمة لرسالة الشبكة.
NetworkingMessage.identity
معرف المرسل.
NetworkingMessage.connectionUserData
بيانات الاتصال التي يوفرها المستخدم والتي يتم تعيينها باستخدام وظيفة NetworkingSockets.SetConnectionUserData()
.
NetworkingMessage.timeReceived
الطابع الزمني المحلي عند استلام الرسالة.
NetworkingMessage.messageNumber
رقم الرسالة المعين من قبل المرسل.
حمولة NetworkingMessage.data
للرسالة.
NetworkingMessage.length
طول الحمولة.
معرف اتصال NetworkingMessage.connection
الذي جاءت منه الرسالة.
NetworkingMessage.channel
رقم القناة التي تم استلام الرسالة عليها.
إشارات NetworkingMessage.flags
التي تم استخدامها لإرسال الرسالة.
يقوم NetworkingMessage.CopyTo(byte[] destination)
بنسخ الحمولة من الرسالة إلى صفيف الوجهة.
NetworkingMessage.Destroy()
يدمر الرسالة. يجب أن يتم استدعاؤه فقط عند الحصول على الرسائل من مآخذ التوصيل.
يحتوي على مؤشر مدارة إلى مآخذ التوصيل.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
بإنشاء مأخذ توصيل بتكوينات اختيارية وإرجاع معرف مأخذ التوصيل الذي يستمع للاتصالات الواردة التي بدأت بواسطة وظيفة NetworkingSockets.Connect()
.
يبدأ NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
اتصالاً بمضيف خارجي بتكوينات اختيارية. إرجاع معرف الاتصال المحلي.
يقبل NetworkingSockets.AcceptConnection(Connection connection)
الاتصال الوارد الذي تم تلقيه على مأخذ توصيل الاستماع. عند تلقي محاولة اتصال (ربما بعد تبادل بعض حزم المصافحة الأساسية لمنع الانتحال البسيط)، يتم إنشاء كائن واجهة اتصال في حالة ConnectionState.Connecting
ويتم استدعاء StatusCallback()
. إرجاع النتيجة الموضحة في تعداد Result
.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
ينقطع الاتصال بالمضيف ويبطل مقبض الاتصال. يتم تجاهل أية بيانات غير مقروءة على الاتصال. معلمة السبب هي رمز اختياري يقدمه المستخدم والذي سيتم استلامه على الطرف الآخر وتسجيله (عندما يكون ذلك ممكنًا) في تحليلات الواجهة الخلفية. قد يشير تسجيل التصحيح إلى وجود خطأ إذا كان رمز السبب خارج النطاق المقبول. معلمة التصحيح عبارة عن سلسلة تشخيصية اختيارية يمكن قراءتها بواسطة الإنسان وسيتم استلامها على الطرف الآخر وتسجيلها (عندما يكون ذلك ممكنًا) في تحليلات الواجهة الخلفية. إذا كان المستخدم يرغب في وضع مأخذ التوصيل في حالة باقية، حيث تتم محاولة مسح أي بيانات مرسلة متبقية، فيجب تمكين المعلمة المتبقية، وإلا فلن يتم مسح البيانات الموثوقة. إذا كان الاتصال قد انتهى بالفعل، فسيتم تجاهل رمز السبب وسلسلة التصحيح والمعلمة المتبقية. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
يدمر مأخذ توصيل الاستماع، وجميع مآخذ توصيل العميل التي تم إنشاؤها عن طريق قبول الاتصالات على مأخذ توصيل الاستماع. يحدد السبب البعيد إجراءات التنظيف التي يتم تنفيذها على مآخذ توصيل العميل التي يتم تدميرها. إذا تم طلب التنظيف وطلب المستخدم ربط مأخذ توصيل الاستماع بمنفذ محلي معين لتسهيل اتصالات IPv4 المباشرة، فيجب أن يظل مأخذ توصيل UDP الأساسي مفتوحًا حتى يتم تنظيف جميع العملاء. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
يقوم NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
بتعيين البيانات التي يوفرها المستخدم للاتصال. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
يقوم NetworkingSockets.GetConnectionUserData(Connection peer)
بإرجاع البيانات التي يوفرها المستخدم أو -1 إذا كان المؤشر غير صالح أو إذا لم يتم تعيين أي بيانات للاتصال.
NetworkingSockets.SetConnectionName(Connection peer, string name)
يعين اسمًا للاتصال، يُستخدم غالبًا لتصحيح الأخطاء.
يقوم NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
بجلب اسم الاتصال إلى السلسلة القابلة للتغيير. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
NetworkingSockets.SendMessageToConnection(Connection connection, byte[] data, int length, SendFlags flags)
يرسل رسالة إلى المضيف على مأخذ التوصيل المتصل. معلمات الطول ونوع الإرسال اختيارية. يمكن تحديد أعلام متعددة في وقت واحد. إرجاع النتيجة الموضحة في تعداد Result
. يمكن استخدام مؤشر IntPtr
إلى المخزن المؤقت الأصلي بدلاً من الإشارة إلى صفيف بايت.
NetworkingSockets.FlushMessagesOnConnection(Connection connection)
إذا تم تمكين Nagle (يتم تمكينه افتراضيًا) فسيتم وضع الرسالة في قائمة انتظار وقت Nagle قبل إرسالها، لدمج الرسائل الصغيرة في نفس الحزمة. قم باستدعاء هذه الوظيفة لمسح أي رسائل في قائمة الانتظار وإرسالها على الفور في وقت الإرسال التالي. إرجاع النتيجة الموضحة في تعداد Result
.
يقوم NetworkingSockets.ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
بجلب الرسائل التالية المتاحة من مأخذ التوصيل للاتصال. إرجاع عدد من الرسائل أو -1 إذا كان مؤشر الاتصال غير صالح. ترتيب الرسائل التي يتم إرجاعها في المصفوفة ذو صلة. سيتم استلام الرسائل الموثوقة بالترتيب الذي تم إرسالها به. إذا تم الحصول على أية رسائل، فيجب استدعاء message.Destroy()
لكل منها لتحرير الموارد.
يحصل NetworkingSockets.GetConnectionInfo(Connection connection, ref ConnectionInfo info)
على معلومات حول الاتصال المحدد. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
يحصل NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
على مجموعة مختصرة من حالة الاتصال التي يمكن عرضها للمستخدم داخل اللعبة. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
يحصل NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
على إحصائيات اتصال مفصلة في نموذج قابل للطباعة. يُرجع 0 عند النجاح، أو -1 عند الفشل، أو > 0 إذا كانت سعة السلسلة القابلة للتغيير غير كافية.
يحصل NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
على عنوان IP المحلي ورقم المنفذ لمقبس الاستماع. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
بإنشاء زوج من الاتصالات التي تتحدث مع بعضها البعض، على سبيل المثال، اتصال الاسترجاع. سيتم وضع الاتصالين على الفور في حالة الاتصال، ولن يتم استدعاء أي رد اتصال. بعد ذلك، إذا تم إغلاق أي من الاتصالين، فسيتلقى الاتصال الآخر رد اتصال، تمامًا كما لو كان يتصل عبر الشبكة. افتراضيًا، يتم استخدام المخازن المؤقتة الداخلية، لتجاوز الشبكة تمامًا، وتقطيع الرسائل إلى حزم، والتشفير، ونسخ الحمولة، وما إلى ذلك. وهذا يعني أن حزم الاسترجاع، افتراضيًا، لن تحاكي التأخير أو الخسارة. ستؤدي معلمة استرجاع الشبكة الممكّنة إلى قيام زوج مأخذ التوصيل بإرسال حزم عبر جهاز استرجاع الشبكة المحلية على منافذ مؤقتة. يتم دعم التأخير والخسارة الزائفة في هذه الحالة، ويتم إنفاق وقت وحدة المعالجة المركزية للتشفير وفك التشفير.
يحصل NetworkingSockets.GetIdentity()
على هوية مرتبطة بالمآخذ.
يقوم NetworkingSockets.CreatePollGroup()
بإنشاء مجموعة استقصاء جديدة للاتصالات. إرجاع مؤشر مجموعة الاستقصاء.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
يدمر مجموعة الاستقصاء. إذا كان هناك أي اتصالات في مجموعة الاستطلاع، فسيتم إزالتها من المجموعة وتركها في حالة لا تكون فيها جزءًا من أي مجموعة استطلاع. إرجاع خطأ إذا تم تمرير مؤشر مجموعة استقصاء غير صالح.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
يعين اتصالاً بمجموعة الاستقصاء. قد ينتمي الاتصال إلى مجموعة استقصاء واحدة فقط. تؤدي إضافة اتصال إلى مجموعة استقصاء إلى إزالته ضمنيًا من أي مجموعة استقصاء أخرى. يمكنك تمرير قيمة صفرية إلى معلمة مجموعة الاستقصاء لإزالة اتصال من مجموعة الاستقصاء الحالية الخاصة بها. إذا كانت هناك رسائل مستلمة معلقة حاليًا على الاتصال، فستتم محاولة إضافتها إلى قائمة انتظار الرسائل الخاصة بمجموعة الاستقصاء بالترتيب الذي كان سيتم تطبيقه تقريبًا إذا كان الاتصال جزءًا من مجموعة الاستقصاء بالفعل في الوقت الذي تم فيه تم استلام الرسائل. إرجاع خطأ إذا كان مقبض الاتصال غير صالح أو إذا كان مقبض مجموعة الاستقصاء غير صالح.
يقوم NetworkingSockets.ReceiveMessagesOnPollGroup()
بجلب الرسائل المتوفرة التالية من مأخذ التوصيل على أي اتصال في مجموعة الاستقصاء. افحص NetworkingMessage.connection
لتحديد الاتصال. عادةً ما يتطابق ترتيب تسليم الرسائل بين الاتصالات المختلفة مع ترتيب استلام الحزمة الأخيرة التي أكملت الرسالة. ولكن هذا ليس ضمانًا قويًا، خاصة بالنسبة للحزم المستلمة بشكل صحيح حيث يتم تعيين اتصال لمجموعة الاستقصاء. ترتيب تسليم الرسائل على نفس الاتصال محدد بشكل جيد ونفس الضمانات موجودة. لا يتم تجميع الرسائل حسب الاتصال، لذلك لن تظهر بالضرورة على التوالي في القائمة، وقد تكون متداخلة مع رسائل اتصالات أخرى. إرجاع عدد من الرسائل أو -1 إذا كان مؤشر مجموعة الاستقصاء غير صالح.
يرسل NetworkingSockets.RunCallbacks()
عمليات الاسترجاعات إذا كانت متوفرة.
يقوم NetworkingUtils.Dispose()
بتدمير أدوات الشبكة وتنظيف الموارد غير المُدارة.
تقوم NetworkingUtils.Time
بإرجاع الوقت الرتيب المحلي الحالي بالميكروثانية. ولا يتم إعادة تعيينه أبدًا أثناء بقاء التطبيق على قيد الحياة.
تحصل NetworkingUtils.FirstConfigurationValue
على أقل قيمة تكوين مرقمة متوفرة في البيئة الحالية.
يقوم NetworkingUtils.SetStatusCallback(StatusCallback callback)
بتعيين رد اتصال لتحديثات حالة الاتصال. إرجاع صحيح عند النجاح أو خطأ عند الفشل.
NetworkingUtils.SetDebugCallback(DebugType detailLevel, DebugCallback callback)
بتعيين رد اتصال لإخراج التصحيح.
NetworkingUtils.SetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ConfigurationDataType dataType, IntPtr value)
يعين قيمة تكوين وفقًا لتعدادات ConfigurationValue
و ConfigurationScope
و ConfigurationDataType
. يجب أن تكون معلمة القيمة مرجعًا للقيمة الفعلية.
NetworkingUtils.SetConfigurationValue(Configuration configuration, ConfigurationScope configurationScope, IntPtr scopeObject)
بتعيين التكوين باستخدام بنية Configuration
وفقًا لتعداد ConfigurationScope
.
NetworkingUtils.GetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ref ConfigurationDataType dataType, ref IntPtr result, ref IntPtr resultLength)
يحصل على قيمة تكوين وفقًا لـ ConfigurationValue
و ConfigurationScope
و تعدادات ConfigurationDataType
.
يحتوي على حقول ثابتة.
Library.maxCloseMessageLength
الحد الأقصى لطول سلسلة السبب بالبايت عند إغلاق الاتصال.
Library.maxMessageSize
الحد الأقصى لحجم الرسالة الواحدة التي يمكن إرسالها.
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
يقوم بتهيئة المكتبة الأصلية بهوية اختيارية سيتم ربطها بمآخذ التوصيل. تعتبر معلمة رسالة الخطأ اختيارية ويجب استخدامها لتحديد الخطأ أثناء التهيئة. يجب أن تكون سعة السلسلة القابلة للتغيير لرسالة الخطأ مساوية لـ Library.maxErrorMessageLength
.
Library.Deinitialize()
تقوم بإلغاء تهيئة المكتبة الأصلية. ينبغي الاتصال به بعد الانتهاء من العمل.