이 저장소는 Valve Software에서 생성하고 유지 관리하는 GameNetworkingSockets 라이브러리의 관리형 C# 추상화를 제공합니다. 시작하기 전에 필요한 모든 종속성을 포함하여 네이티브 라이브러리를 빌드해야 합니다.
프로젝트는 네이티브 라이브러리 릴리스에 따라 업데이트되고 있습니다.
관리되는 어셈블리는 C# 3.0 이상을 지원하는 사용 가능한 컴파일 플랫폼을 사용하여 빌드할 수 있습니다.
Span 지원을 활성화하려면 VALVESOCKETS_SPAN
정의하세요. 기본 메모리 블록에 빠르게 액세스하고 성능을 향상하려면 다음 단계를 따르십시오.
작업을 시작하기 전에 Valve.Sockets.Library.Initialize();
기능.
작업이 완료되면 Valve.Sockets.Library.Deinitialize();
기능.
NetworkingSockets 서버 = 새 NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback 상태 = (ref StatusInfo 정보) => {스위치 (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("클라이언트 연결됨 - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:server .CloseConnection(info.connection);Console.WriteLine("클라이언트 연결이 끊어졌습니다 - ID: " + info.connection + ", IP: " + info.connectionInfo.address.GetIP());break;}};utils.SetStatusCallback(status);주소 주소 = 새 Address();address.SetAddress("::0", 포트);uint listeningSocket = server.CreateListenSocket (참조 주소);#if VALVESOCKETS_SPANMessageCallback message = (NetworkingMessage netMessage에서) => {Console.WriteLine("-에서 메시지 수신됨 - ID: " + netMessage.connection + ", 채널 ID: " + netMessage.channel + ", 데이터 길이: " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages ];#endifwhile (!Console.KeyAvailable) {server.RunCallbacks(); #if VALVESOCKETS_SPANserver.ReceiveMessagesOnPollGroup(pollGroup, 메시지, 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 ("다음에서 받은 메시지 - ID: " + netMessage.connection + ", 채널 ID: " + netMessage.channel + ", 데이터 길이: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}server.DestroyPollGroup(pollGroup);
NetworkingSockets 클라이언트 = 새 NetworkingSockets();uint 연결 = 0;StatusCallback 상태 = (ref StatusInfo 정보) => {스위치(info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" 서버에 연결된 클라이언트 - ID: " + 연결);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(연결);Console.WriteLine("클라이언트가 서버에서 연결이 끊어졌습니다.");break;}};utils.SetStatusCallback(status);주소 주소 = 새 Address();address.SetAddress(":: 1", 포트);connection = client.Connect(참조 주소);#if VALVESOCKETS_SPANMessageCallback 메시지 = (NetworkingMessage에서 netMessage) => {Console.WriteLine("서버에서 받은 메시지 - 채널 ID: " + netMessage.channel + ", 데이터 길이: " + netMessage.length);};#else const int maxMessages = 20;NetworkingMessage[] netMessages = new NetworkingMessage[maxMessages];#endifwhile (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection(연결, 메시지, 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 ("서버로부터 메시지 수신 - 채널 ID: " + netMessage.channel + ", 데이터 길이: " + netMessage.length);netMessage.Destroy();}} #endif Thread.Sleep(15);}
byte[] 데이터 = 새 byte[64];sockets.SendMessageToConnection(연결, 데이터);
바이트[] 버퍼 = 새 바이트[1024];netMessage.CopyTo(버퍼);
DebugCallback 디버그 = (유형, 메시지) => {Console.WriteLine("디버그 - 유형: " + 유형 + ", 메시지: " + 메시지);};NetworkingUtils utils = new NetworkingUtils();utils.SetDebugCallback(DebugType.Everything , 디버그);
콘솔 기능을 Unity에서 제공하는 기능으로 대체해야 한다는 점을 제외하면 사용법은 .NET 환경과 거의 동일합니다. NetworkingSockets.RunCallbacks()
게임 루프에서 호출되는 경우 플레이어 설정에서 적절한 옵션을 활성화하여 Unity를 백그라운드에서 계속 실행하세요.
NetworkingSockets.SendMessageToConnection()
함수에 대한 플래그 정의:
SendFlags.Unreliable
신뢰할 수 없습니다. 메시지 전달이 보장되지 않으며 메시지가 순서대로 전달되지 않을 수 있습니다.
SendFlags.Reliable
신뢰할 수 있는 순서로, 대상 연결에서 메시지를 수신해야 하며 메시지가 전달될 때까지 재전송을 시도해야 합니다.
SendFlags.NoNagle
메시지는 타이머 내의 다른 메시지와 그룹화되지 않습니다.
SendFlags.NoDelay
메시지를 상대적으로 빠르게 보낼 수 없는 경우 메시지가 버퍼링되지 않습니다.
NetworkingIdentity
구조에 대한 ID 유형 정의:
IdentityType.Invalid
알 수 없거나 유효하지 않습니다.
IdentityType.SteamID
Steam 식별자입니다.
IdentityType.IPAddress
IPv4/IPv6 주소입니다.
ConnectionInfo.state
필드의 연결 상태 정의:
ConnectionState.None
더미 상태입니다. 연결이 존재하지 않거나 이미 닫혔습니다.
NetworkingSockets.Connect()
함수에 의해 시작된 연결 설정이 진행 중인 ConnectionState.Connecting
.
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
네트워크 연결에 실패했습니다.
Result.InvalidParam
매개변수가 올바르지 않습니다.
Result.InvalidState
호출된 개체가 잘못된 상태였습니다.
Result.Ignored
대상이 보낸 사람을 무시하고 있습니다.
소켓별 이벤트를 제공합니다.
StatusCallback(ref StatusInfo info)
청취 소켓의 디스패치 메커니즘이 연결 상태를 반환할 때 이를 알립니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
애플리케이션별 이벤트를 제공합니다.
DebugCallback(DebugType type, string message)
원하는 세부 정보가 포함된 디버그 정보가 나타나면 이를 알려줍니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
IP 주소 및 포트 번호와 함께 마샬링된 데이터를 포함합니다.
Address.ip
IP 주소(바이트)입니다.
Address.port
포트 번호.
Address.IsLocalHost
ID가 localhost인지 확인합니다.
Address.GetIP()
인쇄 가능한 형식으로 IP 주소를 가져옵니다.
Address.SetLocalHost(ushort port)
지정된 포트로 localhost를 설정합니다.
Address.SetAddress(string ip, ushort port)
지정된 포트로 IP 주소(IPv4/IPv6)를 설정합니다.
Address.Equals(Address other)
주소의 동일성을 결정합니다.
구성과 함께 마샬링된 데이터를 포함합니다.
Configuration.value
ConfigurationValue
열거에 설명된 값의 유형입니다.
Configuration.dataType
ConfigurationDataType
열거에 설명된 데이터 유형입니다.
Configuration.data
구성 데이터의 통합입니다.
연결 상태와 함께 마샬링된 데이터를 포함합니다.
StatusInfo.connection
연결 ID입니다.
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
연결이 완료되었지만 아직 승인을 받지 못하여 재전송해야 할 수 있는 신뢰할 수 있는 데이터의 바이트 수입니다.
네트워킹 ID의 마샬링된 데이터를 포함합니다.
네트워킹 ID에 대한 NetworkingIdentity.type
설명입니다.
NetworkingIdentity.IsInvalid
ID에 잘못된 유형이 있는지 확인합니다.
NetworkingIdentity.GetSteamID()
Steam ID를 가져옵니다.
NetworkingIdentity.SetSteamID(ulong steamID)
Steam ID를 설정합니다.
네트워킹 메시지의 마샬링된 데이터를 포함합니다.
NetworkingMessage.identity
발신자의 식별자입니다.
NetworkingMessage.connectionUserData
NetworkingSockets.SetConnectionUserData()
함수를 사용하여 설정하는 사용자 제공 연결 데이터입니다.
NetworkingMessage.timeReceived
메시지가 수신된 로컬 타임스탬프입니다.
NetworkingMessage.messageNumber
발신자가 할당한 메시지 번호입니다.
메시지의 NetworkingMessage.data
페이로드입니다.
NetworkingMessage.length
페이로드의 길이입니다.
NetworkingMessage.connection
메시지가 시작된 연결 ID입니다.
NetworkingMessage.channel
메시지가 수신된 채널 번호입니다.
NetworkingMessage.flags
메시지를 보내는 데 사용된 플래그입니다.
NetworkingMessage.CopyTo(byte[] destination)
메시지의 페이로드를 대상 배열로 복사합니다.
NetworkingMessage.Destroy()
메시지를 삭제합니다. 소켓에서 메시지를 얻은 경우에만 호출해야 합니다.
소켓에 대한 관리되는 포인터를 포함합니다.
NetworkingSockets.CreateListenSocket(ref Address address, Configuration[] configurations)
선택적 구성으로 소켓을 생성하고 NetworkingSockets.Connect()
함수에 의해 시작된 들어오는 연결을 수신하는 소켓 ID를 반환합니다.
NetworkingSockets.Connect(ref Address address, Configuration[] configurations)
선택적 구성을 사용하여 외부 호스트에 대한 연결을 시작합니다. 로컬 연결 ID를 반환합니다.
NetworkingSockets.AcceptConnection(Connection connection)
청취 소켓에서 수신된 들어오는 연결을 수락합니다. 연결 시도가 수신되면(아마도 사소한 스푸핑을 방지하기 위해 몇 가지 기본 핸드셰이크 패킷이 교환된 후) ConnectionState.Connecting
상태에서 연결 인터페이스 객체가 생성되고 StatusCallback()
이 호출됩니다. Result
열거형에 설명된 결과를 반환합니다.
NetworkingSockets.CloseConnection(Connection connection, int reason, string debug, bool enableLinger)
호스트와의 연결을 끊고 연결 핸들을 무효화합니다. 연결에서 읽지 않은 데이터는 모두 삭제됩니다. 이유 매개변수는 상대방에서 수신되어 (가능한 경우) 백엔드 분석에 기록되는 선택적 사용자 제공 코드입니다. 이유 코드가 허용 가능한 범위를 벗어나는 경우 디버그 로깅에 오류가 표시될 수 있습니다. 디버그 매개변수는 상대방에서 수신되어 (가능한 경우) 백엔드 분석에 기록되는 사람이 읽을 수 있는 선택적 진단 문자열입니다. 사용자가 소켓을 남아 있는 전송 데이터를 모두 플러시하려는 느린 상태로 설정하려는 경우 linger 매개변수를 활성화해야 합니다. 그렇지 않으면 신뢰할 수 있는 데이터가 플러시되지 않습니다. 연결이 이미 종료된 경우 이유 코드, 디버그 문자열 및 링거 매개변수는 무시됩니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
청취 소켓과 청취 소켓에서 연결을 수락하여 생성된 모든 클라이언트 소켓을 삭제합니다. 원격 이유에 따라 삭제되는 클라이언트 소켓에서 어떤 정리 작업이 수행되는지가 결정됩니다. 정리가 요청되고 사용자가 직접 IPv4 연결을 용이하게 하기 위해 특정 로컬 포트에 바인딩된 청취 소켓을 요청한 경우 기본 UDP 소켓은 모든 클라이언트가 정리될 때까지 열려 있어야 합니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.SetConnectionUserData(Connection peer, long userData)
연결에 대한 사용자 제공 데이터를 설정합니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.GetConnectionUserData(Connection peer)
사용자 제공 데이터를 반환하거나, 핸들이 유효하지 않거나 연결에 대해 데이터가 설정되지 않은 경우 -1을 반환합니다.
NetworkingSockets.SetConnectionName(Connection peer, string name)
주로 디버깅에 사용되는 연결 이름을 설정합니다.
NetworkingSockets.GetConnectionName(Connection peer, StringBuilder name, int maxLength)
연결 이름을 변경 가능한 문자열로 가져옵니다. 성공하면 true를, 실패하면 false를 반환합니다.
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)
지정된 연결에 대한 정보를 가져옵니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.GetQuickConnectionStatus(Connection connection, ref ConnectionStatus status)
게임 내에서 사용자에게 표시할 수 있는 간략한 연결 상태 세트를 가져옵니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.GetDetailedConnectionStatus(Connection connection, StringBuilder status, int statusLength)
인쇄 가능한 형식으로 자세한 연결 통계를 가져옵니다. 성공하면 0을, 실패하면 -1을 반환하고, 변경 가능한 문자열의 용량이 충분하지 않으면 > 0을 반환합니다.
NetworkingSockets.GetListenSocketAddress(ListenSocket socket, ref Address address)
청취 소켓의 로컬 IP 및 포트 번호를 가져옵니다. 성공하면 true를, 실패하면 false를 반환합니다.
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
루프백 통신과 같이 서로 통신하는 한 쌍의 연결을 생성합니다. 두 연결은 즉시 연결된 상태로 전환되며 콜백이 호출되지 않습니다. 그 후 두 연결 중 하나가 닫히면 다른 연결은 마치 네트워크를 통해 통신하는 것처럼 콜백을 받게 됩니다. 기본적으로 내부 버퍼가 사용되어 네트워크를 완전히 우회하고, 메시지를 패킷으로 자르고, 암호화하고, 페이로드를 복사하는 등의 작업을 수행합니다. 이는 기본적으로 루프백 패킷이 지연이나 손실을 시뮬레이션하지 않음을 의미합니다. 네트워크 루프백 매개변수를 활성화하면 소켓 쌍이 임시 포트의 로컬 네트워크 루프백 장치를 통해 패킷을 보내게 됩니다. 이 경우 가짜 지연 및 손실이 지원되며 암호화 및 복호화에 CPU 시간이 소비됩니다.
NetworkingSockets.GetIdentity()
소켓과 연결된 ID를 가져옵니다.
NetworkingSockets.CreatePollGroup()
연결을 위한 새 폴 그룹을 만듭니다. 폴링 그룹 핸들을 반환합니다.
NetworkingSockets.DestroyPollGroup(PollGroup pollGroup)
폴링 그룹을 삭제합니다. 폴 그룹에 연결이 있는 경우 해당 연결은 그룹에서 제거되고 어떤 폴 그룹에도 속하지 않는 상태로 남습니다. 잘못된 폴링 그룹 핸들이 전달되면 false를 반환합니다.
NetworkingSockets.SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
폴 그룹에 연결을 할당합니다. 연결은 단일 폴 그룹에만 속할 수 있습니다. 폴 그룹에 연결을 추가하면 다른 폴 그룹에서 해당 연결이 암시적으로 제거됩니다. 현재 폴 그룹에서 연결을 제거하려면 폴 그룹 매개변수에 0 값을 전달할 수 있습니다. 현재 연결에 보류 중인 수신 메시지가 있는 경우 연결이 이미 폴 그룹의 일부였던 경우 적용되었을 순서와 대략 비슷한 순서로 폴 그룹의 메시지 대기열에 해당 메시지를 추가하려고 시도합니다. 메시지가 수신되었습니다. 연결 핸들이 유효하지 않거나 폴링 그룹 핸들이 유효하지 않은 경우 false를 반환합니다.
NetworkingSockets.ReceiveMessagesOnPollGroup()
폴 그룹의 모든 연결에 있는 소켓에서 사용 가능한 다음 메시지를 가져옵니다. NetworkingMessage.connection
검사하여 연결을 식별합니다. 서로 다른 연결 간의 메시지 전달 순서는 일반적으로 메시지를 완료한 마지막 패킷이 수신된 순서와 일치합니다. 그러나 이는 특히 연결이 폴 그룹에 할당될 때 바로 수신된 패킷의 경우 강력한 보장은 아닙니다. 동일한 연결에서 메시지 전달 순서는 잘 정의되어 있으며 동일한 보장이 제공됩니다. 메시지는 연결별로 그룹화되지 않으므로 반드시 목록에 연속적으로 나타날 필요는 없으며 다른 연결에 대한 메시지와 함께 인터리브될 수 있습니다. 메시지 수를 반환하거나 폴링 그룹 핸들이 유효하지 않은 경우 -1을 반환합니다.
NetworkingSockets.RunCallbacks()
가능한 경우 콜백을 전달합니다.
NetworkingUtils.Dispose()
네트워킹 유틸리티를 삭제하고 관리되지 않는 리소스를 정리합니다.
NetworkingUtils.Time
현재 로컬 단조 시간을 마이크로초 단위로 반환합니다. 애플리케이션이 활성 상태인 동안에는 재설정되지 않습니다.
NetworkingUtils.FirstConfigurationValue
현재 환경에서 사용 가능한 가장 낮은 번호의 구성 값을 가져옵니다.
NetworkingUtils.SetStatusCallback(StatusCallback callback)
연결 상태 업데이트에 대한 콜백을 설정합니다. 성공하면 true를, 실패하면 false를 반환합니다.
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)
ConfigurationScope
열거에 따라 Configuration
구조를 사용하여 구성을 설정합니다.
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)
소켓과 연결될 선택적 ID를 사용하여 네이티브 라이브러리를 초기화합니다. 오류 메시지 매개변수는 선택 사항이며 초기화 중 오류를 확인하는 데 사용해야 합니다. 오류 메시지에 대한 변경 가능한 문자열의 용량은 Library.maxErrorMessageLength
와 동일해야 합니다.
Library.Deinitialize()
네이티브 라이브러리를 초기화 해제합니다. 작업이 완료된 후 호출해야 합니다.