Dieses Repository bietet eine verwaltete C#-Abstraktion der GameNetworkingSockets-Bibliothek, die von Valve Software erstellt und verwaltet wird. Bevor Sie beginnen, müssen Sie die native Bibliothek mit allen erforderlichen Abhängigkeiten erstellen.
Das Projekt wird entsprechend den Veröffentlichungen der nativen Bibliothek aktualisiert.
Eine verwaltete Assembly kann mit jeder verfügbaren Kompilierungsplattform erstellt werden, die C# 3.0 oder höher unterstützt.
Definieren Sie VALVESOCKETS_SPAN
um die Unterstützung für Span zu aktivieren. Bitte befolgen Sie diese Schritte, um einen schnellen Zugriff auf native Speicherblöcke zu ermöglichen und die Leistung zu verbessern.
Bevor mit der Arbeit begonnen wird, sollte die Bibliothek mit Valve.Sockets.Library.Initialize();
Funktion.
Nachdem die Arbeit erledigt ist, deinitialisieren Sie die Bibliothek mit Valve.Sockets.Library.Deinitialize();
Funktion.
NetworkingSockets server = new NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback status = (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("Client verbunden - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server .CloseConnection(info.connection);Console.WriteLine("Client getrennt - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;}};utils.SetStatusCallback(status);Address address = new Address();address.SetAddress("::0", port);uint listenSocket = server.CreateListenSocket (Ref-Adresse);#if VALVESOCKETS_SPANMessageCallback message = (in NetworkingMessage netMessage) => {Console.WriteLine("Nachricht empfangen von - ID: " + netMessage.connection + ", Kanal-ID: " + netMessage.channel + ", Datenlänge: " + 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 ("Nachricht empfangen von - ID: " + netMessage.connection + ", Kanal-ID: " + netMessage.channel + ", Datenlänge: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
NetworkingSockets client = new NetworkingSockets();uint connect = 0;StatusCallback status = (ref StatusInfo info) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" Client mit Server verbunden – ID: " + Connection);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("Client vom Server getrennt");break;}};utils.SetStatusCallback(status);Address address = new Address();address.SetAddress(":: 1", Port);connection = client.Connect(ref address);#if VALVESOCKETS_SPANMessageCallback message = (in NetworkingMessage netMessage) => {Console.WriteLine("Nachricht vom Server empfangen - Kanal-ID: " + netMessage.channel + ", Datenlänge: " + 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 („Vom Server empfangene Nachricht – Kanal-ID: „ + netMessage.channel +“, Datenlänge: „ + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
byte[] data = new byte[64];sockets.SendMessageToConnection(connection, data);
byte[] buffer = neues byte[1024];netMessage.CopyTo(buffer);
DebugCallback debug = (type, message) => {Console.WriteLine("Debug - Type: " + type + ", Message: " + message);};NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything , debuggen);
Die Nutzung ist fast die gleiche wie in der .NET-Umgebung, außer dass die Konsolenfunktionen durch von Unity bereitgestellte Funktionen ersetzt werden müssen. Wenn NetworkingSockets.RunCallbacks()
in einer Spielschleife aufgerufen wird, lassen Sie Unity im Hintergrund laufen, indem Sie die entsprechende Option in den Player-Einstellungen aktivieren.
Definitionen eines Flags für die Funktion NetworkingSockets.SendMessageToConnection()
:
SendFlags.Unreliable
unzuverlässig, die Zustellung der Nachricht ist nicht garantiert, die Nachricht wird möglicherweise in einer falschen Reihenfolge zugestellt.
SendFlags.Reliable
ist zuverlässig geordnet, eine Nachricht muss von der Zielverbindung empfangen werden und es sollten erneute Sendeversuche unternommen werden, bis die Nachricht zugestellt wird.
SendFlags.NoNagle
Eine Nachricht wird innerhalb eines Timers nicht mit anderen Nachrichten gruppiert.
SendFlags.NoDelay
Eine Nachricht wird nicht gepuffert, wenn sie nicht relativ schnell gesendet werden kann.
Definitionen des Identitätstyps für NetworkingIdentity
Struktur:
IdentityType.Invalid
unbekannt oder ungültig.
IdentityType.SteamID
Steam-ID.
IdentityType.IPAddress
IPv4/IPv6-Adresse.
Definitionen der Verbindungszustände für das Feld ConnectionInfo.state
:
ConnectionState.None
Dummy-Status, die Verbindung existiert nicht oder wurde bereits geschlossen.
ConnectionState.Connecting
läuft gerade beim Herstellen einer Verbindung, die durch die Funktion NetworkingSockets.Connect()
initiiert wurde.
ConnectionState.FindingRoute
Wenn der Server die Verbindung akzeptiert, wechselt diese Verbindung in den Rendezvous-Status, die End-to-End-Route ist jedoch noch nicht eingerichtet (über das Relay-Netzwerk).
ConnectionState.Connected
Eine durch die Funktion NetworkingSockets.Connect()
initiierte Verbindungsanforderung wurde abgeschlossen.
ConnectionState.ClosedByPeer
Eine Verbindung wurde vom Peer geschlossen, jedoch nicht lokal. Befinden sich Nachrichten in der Eingangswarteschlange, können diese abgerufen werden. Andernfalls kann nichts mit der Verbindung gemacht werden, außer sie mithilfe der Funktion NetworkingSockets.CloseConnection()
zu schließen. Aus API-Sicht besteht die Verbindung weiterhin und muss geschlossen werden, um Ressourcen freizugeben.
ConnectionState.ProblemDetectedLocally
Es wurde lokal eine Verbindungsstörung festgestellt. Versuche, weitere Nachrichten zu senden, schlagen fehl. Alle verbleibenden empfangenen Nachrichten in der Warteschlange sind verfügbar. Aus API-Sicht besteht die Verbindung weiterhin und muss geschlossen werden, um Ressourcen freizugeben.
Definitionen von Konfigurationsbereichen:
ConfigurationScope.Global
ConfigurationScope.SocketsInterface
ConfigurationScope.ListenSocket
ConfigurationScope.Connection
Definitionen der Konfigurationsdatentypen:
ConfigurationDataType.Int32
ConfigurationDataType.Int64
ConfigurationDataType.Float
ConfigurationDataType.String
ConfigurationDataType.FunctionPtr
Definitionen der Konfigurationswerte:
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
Definitionen der Konfigurationswertergebnisse:
ConfigurationValueResult.BadValue
ConfigurationValueResult.BadScopeObject
ConfigurationValueResult.BufferTooSmall
ConfigurationValueResult.OK
ConfigurationValueResult.OKInherited
Definitionen von Debug-Typen:
DebugType.None
DebugType.Bug
DebugType.Error
DebugType.Important
DebugType.Warning
DebugType.Message
DebugType.Verbose
DebugType.Debug
DebugType.Everything
Definitionen des Operationsergebnisses:
Result.OK
Erfolg.
Allgemeiner Result.Fail
-Fehler.
Result.NoConnection
fehlgeschlagene Netzwerkverbindung.
Result.InvalidParam
ein Parameter ist falsch.
Das von Result.InvalidState
aufgerufene Objekt befand sich in einem ungültigen Zustand.
Result.Ignored
Ziel ignoriert einen Absender.
Stellt Ereignisse pro Socket bereit.
StatusCallback(ref StatusInfo info)
benachrichtigt, wenn der Dispatch-Mechanismus am Listen-Socket einen Verbindungsstatus zurückgibt. Ein Verweis auf den Delegaten sollte vor der Müllsammlung geschützt werden.
Stellt Ereignisse pro Anwendung bereit.
DebugCallback(DebugType type, string message)
benachrichtigt, wenn Debug-Informationen mit der gewünschten Ausführlichkeit angezeigt werden. Ein Verweis auf den Delegaten sollte vor der Müllsammlung geschützt werden.
Enthält gemarshallte Daten mit einer IP-Adresse und einer Portnummer.
Address.ip
IP-Adresse in Bytes.
Address.port
Portnummer.
Address.IsLocalHost
prüft, ob die Identität localhost ist.
Address.GetIP()
ruft eine IP-Adresse in druckbarer Form ab.
Address.SetLocalHost(ushort port)
legt localhost mit einem angegebenen Port fest.
Address.SetAddress(string ip, ushort port)
legt eine IP-Adresse (IPv4/IPv6) mit einem angegebenen Port fest.
Address.Equals(Address other)
bestimmt die Gleichheit von Adressen.
Enthält gemarshallte Daten mit Konfiguration.
Configuration.value
ist ein Typ des in der ConfigurationValue
Enumeration beschriebenen Werts.
Configuration.dataType
ist ein Datentyp, der in der ConfigurationDataType
Enumeration beschrieben wird.
Configuration.data
ist eine Vereinigung von Konfigurationsdaten.
Enthält gemarshallte Daten mit Verbindungsstatus.
StatusInfo.connection
Verbindungs-ID.
StatusInfo.connectionInfo
ist im Wesentlichen ConnectionInfo
Struktur mit gemarshallten Daten.
Enthält gemarshallte Daten mit Verbindungsinformationen.
ConnectionInfo.identity
-Identifikator eines Endpunkts.
ConnectionInfo.userData
Vom Benutzer bereitgestellte Daten, die mithilfe der Funktion NetworkingSockets.SetConnectionUserData()
festgelegt werden.
ConnectionInfo.listenSocket
Listen-Socket für diese Verbindung.
ConnectionInfo.address
Remote-Adresse eines Endpunkts.
ConnectionInfo.state
High-Level-Status der Verbindung, die in der ConnectionState
Enumeration beschrieben wird.
ConnectionInfo.endReason
Grundursache für den Verbindungsabbruch oder das Problem.
ConnectionInfo.endDebug
Erklärung in einer für Menschen lesbaren Form für den Verbindungsabbruch oder ein Problem. Dies ist nur für Debugging-Diagnosezwecke gedacht und nicht für die Anzeige für Benutzer. Möglicherweise enthält es einige spezifische Details zum Problem.
Die Debugbeschreibung ConnectionInfo.connectionDescription
umfasst das Verbindungshandle, den Verbindungstyp und Peer-Informationen.
Enthält gemarshallte Daten mit Verbindungsstatus für häufige Anfragen.
ConnectionStatus.state
High-Level-Status der Verbindung, die in der ConnectionState
Enumeration beschrieben wird.
ConnectionStatus.ping
aktueller Ping in Millisekunden.
ConnectionStatus.connectionQualityLocal
Verbindungsqualität lokal gemessen (Prozentsatz der Ende-zu-Ende in der richtigen Reihenfolge zugestellten Pakete).
ConnectionStatus.connectionQualityRemote
Paketzustellungserfolgsrate, wie vom Remote-Host beobachtet.
ConnectionStatus.outPacketsPerSecond
aktuelle ausgehende Paketraten aus dem aktuellen Verlauf.
ConnectionStatus.outBytesPerSecond
aktuelle ausgehende Datenraten aus dem aktuellen Verlauf.
ConnectionStatus.inPacketsPerSecond
aktuelle eingehende Paketraten aus dem aktuellen Verlauf.
ConnectionStatus.inBytesPerSecond
aktuelle eingehende Datenraten aus dem aktuellen Verlauf.
ConnectionStatus.sendRateBytesPerSecond
geschätzte Rate, mit der Daten an einen Peer gesendet werden können. Er könnte deutlich höher sein als ConnectionStatus.outBytesPerSecond
, was bedeutet, dass die Kapazität des Kanals höher ist als die gesendeten Daten.
ConnectionStatus.pendingUnreliable
Anzahl der Bytes, deren unzuverlässiges Senden aussteht. Hierbei handelt es sich um Daten, deren Übermittlung kürzlich angefordert, aber noch nicht tatsächlich übermittelt wurde.
ConnectionStatus.pendingReliable
Anzahl der Bytes, die darauf warten, zuverlässig gesendet zu werden. Die zuverlässige Zahl umfasst auch Daten, die zuvor auf dem Kabel platziert wurden, jetzt aber zur erneuten Übertragung geplant sind. Somit ist es möglich, eine Zunahme der Bytes zwischen zwei Prüfungen zu beobachten, auch wenn zwischen den Prüfungen keine Aufrufe zum Senden zuverlässiger Daten getätigt wurden. Daten, die auf die Nagle-Verzögerung warten, werden in diesen Zahlen angezeigt.
ConnectionStatus.sentUnackedReliable
Anzahl der Bytes zuverlässiger Daten, die über die Leitung übertragen wurden, für die jedoch noch keine Bestätigung erhalten wurde und die daher möglicherweise erneut übertragen werden müssen.
Enthält gemarshallte Daten der Netzwerkidentität.
NetworkingIdentity.type
-Beschreibung einer Netzwerkidentität.
NetworkingIdentity.IsInvalid
prüft, ob die Identität den ungültigen Typ hat.
NetworkingIdentity.GetSteamID()
ruft die Steam-ID ab.
NetworkingIdentity.SetSteamID(ulong steamID)
legt die Steam-ID fest.
Enthält gemarshallte Daten der Netzwerknachricht.
NetworkingMessage.identity
-Identifikator eines Absenders.
NetworkingMessage.connectionUserData
Vom Benutzer bereitgestellte Verbindungsdaten, die mithilfe der Funktion NetworkingSockets.SetConnectionUserData()
festgelegt werden.
NetworkingMessage.timeReceived
lokaler Zeitstempel, als die Nachricht empfangen wurde.
NetworkingMessage.messageNumber
Nachrichtennummer, die von einem Absender zugewiesen wurde.
NetworkingMessage.data
Nutzlast einer Nachricht.
NetworkingMessage.length
Länge der Nutzlast.
NetworkingMessage.connection
Verbindungs-ID, von der die Nachricht stammt.
NetworkingMessage.channel
-Kanalnummer, auf der die Nachricht empfangen wurde.
NetworkingMessage.flags
-Flags, die zum Senden der Nachricht verwendet wurden.
NetworkingMessage.CopyTo(byte[] destination)
kopiert Nutzdaten aus der Nachricht in das Zielarray.
NetworkingMessage.Destroy()
zerstört die Nachricht. Sollte nur aufgerufen werden, wenn die Nachrichten von Sockets abgerufen werden.
Enthält einen verwalteten Zeiger auf die Sockets.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
erstellt einen Socket mit optionalen Konfigurationen und gibt eine Socket-ID zurück, die auf eingehende Verbindungen wartet, die von der Funktion NetworkingSockets.Connect()
initiiert werden.
NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
initiiert eine Verbindung zu einem fremden Host mit optionalen Konfigurationen. Gibt eine lokale Verbindungs-ID zurück.
NetworkingSockets.AcceptConnection(Connection connection)
akzeptiert eine eingehende Verbindung, die auf einem Listen-Socket empfangen wurde. Wenn ein Verbindungsversuch eingeht (vielleicht nachdem einige grundlegende Handshake-Pakete ausgetauscht wurden, um triviales Spoofing zu verhindern), wird ein Verbindungsschnittstellenobjekt im ConnectionState.Connecting
Zustand erstellt und ein StatusCallback()
aufgerufen. Gibt ein in der Result
Enumeration beschriebenes Ergebnis zurück.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
trennt die Verbindung zum Host und macht das Verbindungshandle ungültig. Alle ungelesenen Daten auf der Verbindung werden verworfen. Der Reason-Parameter ist ein optionaler, vom Benutzer bereitgestellter Code, der am anderen Ende empfangen und (wenn möglich) in der Backend-Analyse aufgezeichnet wird. Die Debug-Protokollierung weist möglicherweise auf einen Fehler hin, wenn der Ursachencode außerhalb des akzeptablen Bereichs liegt. Der Debug-Parameter ist eine optionale, für Menschen lesbare Diagnosezeichenfolge, die am anderen Ende empfangen und (wenn möglich) in der Backend-Analyse aufgezeichnet wird. Wenn der Benutzer den Socket in einen verweilenden Zustand versetzen möchte, in dem versucht wird, alle verbleibenden gesendeten Daten zu löschen, sollte der Parameter „verweilen“ aktiviert werden, andernfalls werden zuverlässige Daten nicht geleert. Wenn die Verbindung bereits beendet wurde, werden der Ursachencode, die Debug-Zeichenfolge und der Linger-Parameter ignoriert. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
zerstört den Listen-Socket und alle Client-Sockets, die durch das Akzeptieren von Verbindungen auf dem Listen-Socket generiert werden. Der Remote-Grund bestimmt, welche Bereinigungsaktionen für die zerstörten Client-Sockets durchgeführt werden. Wenn eine Bereinigung angefordert wird und der Benutzer den an einen bestimmten lokalen Port gebundenen Listen-Socket angefordert hat, um direkte IPv4-Verbindungen zu ermöglichen, muss der zugrunde liegende UDP-Socket geöffnet bleiben, bis alle Clients bereinigt wurden. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
legt vom Benutzer bereitgestellte Daten für die Verbindung fest. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.GetConnectionUserData(Connection peer)
gibt vom Benutzer bereitgestellte Daten oder -1 zurück, wenn ein Handle ungültig ist oder keine Daten für die Verbindung festgelegt wurden.
NetworkingSockets.SetConnectionName(Connection peer, string name)
legt einen Namen für die Verbindung fest, der hauptsächlich zum Debuggen verwendet wird.
NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
ruft den Verbindungsnamen für die veränderbare Zeichenfolge ab. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.SendMessageToConnection(Connection connection, byte[] data, int length, SendFlags flags)
sendet eine Nachricht an den Host auf dem verbundenen Socket. Die Parameter Länge und Sendetyp sind optional. Es können mehrere Flags gleichzeitig angegeben werden. Gibt ein in der Result
Enumeration beschriebenes Ergebnis zurück. Der Zeiger IntPtr
auf einen nativen Puffer kann anstelle einer Referenz auf ein Byte-Array verwendet werden.
NetworkingSockets.FlushMessagesOnConnection(Connection connection)
Wenn der Nagle aktiviert ist (standardmäßig aktiviert), wird die Nachricht vor dem Senden für die Nagle-Zeit in die Warteschlange gestellt, um kleine Nachrichten im selben Paket zusammenzuführen. Rufen Sie diese Funktion auf, um alle in der Warteschlange befindlichen Nachrichten zu leeren und sie sofort bei der nächsten Übertragung zu senden. Gibt ein in der Result
Enumeration beschriebenes Ergebnis zurück.
NetworkingSockets.ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
ruft die nächsten verfügbaren Nachrichten vom Socket für eine Verbindung ab. Gibt eine Anzahl von Nachrichten oder -1 zurück, wenn das Verbindungshandle ungültig ist. Die Reihenfolge der im Array zurückgegebenen Nachrichten ist relevant. Zuverlässige Nachrichten werden in der Reihenfolge empfangen, in der sie gesendet wurden. Wenn Nachrichten abgerufen werden, sollte message.Destroy()
für jede einzelne aufgerufen werden, um Ressourcen freizugeben.
NetworkingSockets.GetConnectionInfo(Connection connection, ref ConnectionInfo info)
ruft Informationen über die angegebene Verbindung ab. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
ruft einen kurzen Satz des Verbindungsstatus ab, der dem Benutzer im Spiel angezeigt werden kann. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
ruft detaillierte Verbindungsstatistiken in druckbarer Form ab. Gibt 0 bei Erfolg, -1 bei Fehler oder > 0 zurück, wenn die Kapazität der veränderbaren Zeichenfolge nicht ausreicht.
NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
ruft die lokale IP-Adresse und die Portnummer eines Listen-Sockets ab. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
erstellt ein Paar von Verbindungen, die miteinander kommunizieren, z. B. eine Loopback-Kommunikation. Die beiden Verbindungen werden sofort in den verbundenen Zustand versetzt und es werden keine Rückrufe aufgerufen. Wenn danach eine der Verbindungen geschlossen wird, erhält die andere Verbindung einen Rückruf, genau so, als ob sie über das Netzwerk kommunizieren würden. Standardmäßig werden interne Puffer verwendet, die das Netzwerk, das Zerteilen von Nachrichten in Pakete, die Verschlüsselung, das Kopieren der Nutzlast usw. vollständig umgehen. Dies bedeutet, dass Loopback-Pakete standardmäßig keine Verzögerung oder Verlust simulieren. Der aktivierte Netzwerk-Loopback-Parameter bewirkt, dass das Socket-Paar Pakete über das lokale Netzwerk-Loopback-Gerät an kurzlebigen Ports sendet. In diesem Fall werden gefälschte Verzögerungen und Verluste unterstützt, und es wird CPU-Zeit für die Verschlüsselung und Entschlüsselung aufgewendet.
NetworkingSockets.GetIdentity()
ruft eine mit Sockets verknüpfte Identität ab.
NetworkingSockets.CreatePollGroup()
erstellt eine neue Poll-Gruppe für Verbindungen. Gibt das Poll-Gruppen-Handle zurück.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
zerstört eine Umfragegruppe. Wenn in der Umfragegruppe Verbindungen vorhanden sind, werden diese aus der Gruppe entfernt und in einem Zustand belassen, in dem sie keiner Umfragegruppe angehören. Gibt „false“ zurück, wenn ein ungültiges Poll-Gruppen-Handle übergeben wird.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
weist einer Poll-Gruppe eine Verbindung zu. Eine Verbindung darf nur zu einer einzigen Poll-Gruppe gehören. Durch das Hinzufügen einer Verbindung zu einer Umfragegruppe wird diese implizit aus allen anderen Umfragegruppen entfernt. Sie können dem Poll-Gruppenparameter einen Nullwert übergeben, um eine Verbindung aus ihrer aktuellen Poll-Gruppe zu entfernen. Wenn derzeit empfangene Nachrichten für die Verbindung anstehen, wird versucht, sie in ungefähr der Reihenfolge zur Nachrichtenwarteschlange für die Poll-Gruppe hinzuzufügen, die angewendet worden wäre, wenn die Verbindung zum Zeitpunkt des Verbindungsaufbaus bereits Teil der Poll-Gruppe gewesen wäre Nachrichten wurden empfangen. Gibt „false“ zurück, wenn das Verbindungshandle ungültig ist oder wenn das Abfragegruppenhandle ungültig ist.
NetworkingSockets.ReceiveMessagesOnPollGroup()
ruft die nächsten verfügbaren Nachrichten vom Socket für jede Verbindung in der Poll-Gruppe ab. Untersuchen Sie NetworkingMessage.connection
, um die Verbindung zu identifizieren. Die Übermittlungsreihenfolge von Nachrichten zwischen verschiedenen Verbindungen stimmt normalerweise mit der Reihenfolge überein, in der das letzte Paket empfangen wurde, das die Nachricht vervollständigte. Dies ist jedoch keine starke Garantie, insbesondere für Pakete, die genau dann empfangen werden, wenn eine Verbindung einer Polling-Gruppe zugewiesen wird. Die Übermittlungsreihenfolge von Nachrichten über dieselbe Verbindung ist klar definiert und es gelten die gleichen Garantien. Nachrichten werden nicht nach Verbindung gruppiert, daher erscheinen sie nicht unbedingt nacheinander in der Liste, sondern können mit Nachrichten für andere Verbindungen verschachtelt sein. Gibt eine Anzahl von Nachrichten oder -1 zurück, wenn das Poll-Gruppen-Handle ungültig ist.
NetworkingSockets.RunCallbacks()
sendet Rückrufe, sofern verfügbar.
NetworkingUtils.Dispose()
zerstört die Netzwerk-Utils und bereinigt nicht verwaltete Ressourcen.
NetworkingUtils.Time
gibt eine aktuelle lokale monotone Zeit in Mikrosekunden zurück. Es wird nie zurückgesetzt, solange die Anwendung aktiv bleibt.
NetworkingUtils.FirstConfigurationValue
ruft den Konfigurationswert mit der niedrigsten Nummer ab, der in der aktuellen Umgebung verfügbar ist.
NetworkingUtils.SetStatusCallback(StatusCallback callback)
legt einen Rückruf für Verbindungsstatusaktualisierungen fest. Gibt bei Erfolg „true“ und bei einem Fehler „false“ zurück.
NetworkingUtils.SetDebugCallback(DebugType detailLevel, DebugCallback callback)
legt einen Rückruf für die Debug-Ausgabe fest.
NetworkingUtils.SetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ConfigurationDataType dataType, IntPtr value)
legt einen Konfigurationswert gemäß den Aufzählungen ConfigurationValue
, ConfigurationScope
und ConfigurationDataType
fest. Der Wertparameter sollte eine Referenz auf den tatsächlichen Wert sein.
NetworkingUtils.SetConfigurationValue(Configuration configuration, ConfigurationScope configurationScope, IntPtr scopeObject)
legt eine Konfiguration mithilfe Configuration
gemäß der ConfigurationScope
Enumeration fest.
NetworkingUtils.GetConfigurationValue(ConfigurationValue configurationValue, ConfigurationScope configurationScope, IntPtr scopeObject, ref ConfigurationDataType dataType, ref IntPtr result, ref IntPtr resultLength)
ruft einen Konfigurationswert gemäß den Aufzählungen ConfigurationValue
, ConfigurationScope
und ConfigurationDataType
ab.
Enthält konstante Felder.
Library.maxCloseMessageLength
ist die maximale Länge der Ursachenzeichenfolge in Bytes, wenn eine Verbindung geschlossen wird.
Library.maxMessageSize
ist die maximale Größe einer einzelnen Nachricht, die gesendet werden kann.
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
initialisiert die native Bibliothek mit einer optionalen Identität, die Sockets zugeordnet wird. Der Fehlermeldungsparameter ist optional und sollte verwendet werden, um Fehler während der Initialisierung zu ermitteln. Die Kapazität einer veränderbaren Zeichenfolge für eine Fehlermeldung muss gleich Library.maxErrorMessageLength
sein.
Library.Deinitialize()
deinitialisiert die native Bibliothek. Sollte nach getaner Arbeit angerufen werden.