이는 C, C++, C# 및 기타 언어에 대해 수정된 프로토콜을 사용하는 독립적인 ENet 구현입니다.
특징:
무엇이 잘못될 수 있는지 알아보려면 일반적인 실수를 읽어보세요.
네이티브 라이브러리를 빌드하려면 적절한 소프트웨어가 필요합니다.
GNU Make 또는 Visual Studio를 사용하는 데스크톱 플랫폼 CMake의 경우.
모바일 플랫폼용 Android용 NDK 및 iOS용 Xcode. 컴파일된 모든 라이브러리가 적절한 플랫폼 및 CPU 아키텍처에 할당되었는지 확인하십시오.
Nintendo Switch용 라이브러리를 구축하려면 이 가이드를 따르세요.
관리되는 어셈블리는 C# 3.0 이상을 지원하는 사용 가능한 컴파일 플랫폼을 사용하여 빌드할 수 있습니다.
릴리스 섹션이나 NuGet에서 컴파일된 라이브러리를 가져올 수 있습니다.
ENet-CSharp
에는 .NET 환경(.NET Standard 2.1)용 네이티브 라이브러리가 포함된 컴파일된 어셈블리가 포함되어 있습니다.
ENet-Unity
에는 Unity용 기본 라이브러리가 포함된 스크립트가 포함되어 있습니다.
업그레이드를 위해 폴더를 교체하는 대신 바이너리가 있는 폴더를 삭제하는 것이 좋습니다.
이러한 패키지는 Windows, Linux 및 macOS(x64)와 같은 기존 플랫폼에만 제공됩니다.
지원되는 OS 버전:
작업을 시작하기 전에 ENet.Library.Initialize();
기능.
작업이 완료되면 ENet.Library.Deinitialize();
기능.
using ( Host server = new Host ( ) ) {
Address address = new Address ( ) ;
address . Port = port ;
server . Create ( address , maxClients ) ;
Event netEvent ;
while ( ! Console . KeyAvailable ) {
bool polled = false ;
while ( ! polled ) {
if ( server . CheckEvents ( out netEvent ) <= 0 ) {
if ( server . Service ( 15 , out netEvent ) <= 0 )
break ;
polled = true ;
}
switch ( netEvent . Type ) {
case EventType . None :
break ;
case EventType . Connect :
Console . WriteLine ( "Client connected - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Disconnect :
Console . WriteLine ( "Client disconnected - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Timeout :
Console . WriteLine ( "Client timeout - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP ) ;
break ;
case EventType . Receive :
Console . WriteLine ( "Packet received from - ID: " + netEvent . Peer . ID + ", IP: " + netEvent . Peer . IP + ", Channel ID: " + netEvent . ChannelID + ", Data length: " + netEvent . Packet . Length ) ;
netEvent . Packet . Dispose ( ) ;
break ;
}
}
}
server . Flush ( ) ;
}
using ( Host client = new Host ( ) ) {
Address address = new Address ( ) ;
address . SetHost ( ip ) ;
address . Port = port ;
client . Create ( ) ;
Peer peer = client . Connect ( address ) ;
Event netEvent ;
while ( ! Console . KeyAvailable ) {
bool polled = false ;
while ( ! polled ) {
if ( client . CheckEvents ( out netEvent ) <= 0 ) {
if ( client . Service ( 15 , out netEvent ) <= 0 )
break ;
polled = true ;
}
switch ( netEvent . Type ) {
case EventType . None :
break ;
case EventType . Connect :
Console . WriteLine ( "Client connected to server" ) ;
break ;
case EventType . Disconnect :
Console . WriteLine ( "Client disconnected from server" ) ;
break ;
case EventType . Timeout :
Console . WriteLine ( "Client connection timeout" ) ;
break ;
case EventType . Receive :
Console . WriteLine ( "Packet received from server - Channel ID: " + netEvent . ChannelID + ", Data length: " + netEvent . Packet . Length ) ;
netEvent . Packet . Dispose ( ) ;
break ;
}
}
}
client . Flush ( ) ;
}
Packet packet = default ( Packet ) ;
byte [ ] data = new byte [ 64 ] ;
packet . Create ( data ) ;
peer . Send ( channelID , ref packet ) ;
byte [ ] buffer = new byte [ 1024 ] ;
netEvent . Packet . CopyTo ( buffer ) ;
AllocCallback OnMemoryAllocate = ( size ) => {
return Marshal . AllocHGlobal ( size ) ;
} ;
FreeCallback OnMemoryFree = ( memory ) => {
Marshal . FreeHGlobal ( memory ) ;
} ;
NoMemoryCallback OnNoMemory = ( ) => {
throw new OutOfMemoryException ( ) ;
} ;
Callbacks callbacks = new Callbacks ( OnMemoryAllocate , OnMemoryFree , OnNoMemory ) ;
if ( ENet . Library . Initialize ( callbacks ) )
Console . WriteLine ( "ENet successfully initialized using a custom memory allocator" ) ;
콘솔 기능을 Unity에서 제공하는 기능으로 대체해야 한다는 점을 제외하면 사용법은 .NET 환경과 거의 동일합니다. Host.Service()
가 게임 루프에서 호출되는 경우 제한 시간 매개변수가 비차단을 의미하는 0으로 설정되어 있는지 확인하세요. 또한 플레이어 설정에서 적절한 옵션을 활성화하여 Unity를 백그라운드에서 계속 실행하세요.
가장 잘 알려진 전략은 독립적인 I/O 스레드에서 ENet을 사용하고 스레드 간 메시징 기술을 활용하여 잠금/뮤텍스 없이 스레드/작업 간에 데이터를 전송하는 것입니다. 링 버퍼와 같은 비차단 대기열은 이러한 목적으로 설계되었습니다. 작업자를 사용하여 높은 수준의 추상화 및 논리를 병렬화한 다음 I/O 스레드와 통신하고 메시지를 대기열에 넣거나 대기열에서 빼서 네트워크를 통해 데이터를 보내고 받을 수 있습니다.
일반적으로 ENet은 스레드로부터 안전하지 않지만 사용자가 주의를 기울이면 일부 기능을 안전하게 사용할 수 있습니다.
Packet
구조와 그 기능은 패킷이 값에 따라 스레드 간에만 이동하고 사용자 정의 메모리 할당자가 사용되지 않을 때까지 안전합니다.
Peer.ID
네이티브 측에서 피어에 대한 포인터를 얻으면 해당 ID에 할당된 개체에 대한 추가 작업을 위해 ID가 Peer
구조에 캐시됩니다. Peer
구조는 값에 따라 스레드 간에 이동할 수 있지만 메모리의 데이터가 다른 스레드의 서비스에 의해 변경될 수 있으므로 해당 기능은 스레드로부터 안전하지 않습니다.
Library.Time
로컬 단조 시간을 관리하기 위해 내부적으로 원자 기본 요소를 활용합니다.
Peer.Send()
함수에 대한 플래그 정의:
PacketFlags.None
신뢰할 수 없는 시퀀스이며 패킷 전달이 보장되지 않습니다.
PacketFlags.Reliable
신뢰할 수 있는 시퀀스, 대상 피어가 패킷을 수신해야 하며 패킷이 전달될 때까지 재전송을 시도해야 합니다.
PacketFlags.Unsequenced
패킷은 다른 패킷과 순서가 일치하지 않으며 순서가 잘못 전달될 수 있습니다. 이 플래그는 배달을 신뢰할 수 없게 만듭니다.
PacketFlags.NoAllocate
패킷은 데이터를 할당하지 않으며 사용자가 대신 이를 제공해야 합니다. 패킷 수명은 PacketFreeCallback
콜백을 사용하여 추적해야 합니다.
PacketFlags.UnreliableFragmented
패킷이 MTU를 초과하면 패킷이 불안정하게 조각화됩니다. 기본적으로 MTU를 초과하는 신뢰할 수 없는 패킷은 조각화되어 안정적으로 전송됩니다. 이 플래그는 신뢰할 수 없는 상태로 남아 있어야 하는 패킷을 명시적으로 나타내는 데 사용되어야 합니다.
PacketFlags.Instant
패킷은 다음 서비스 반복 시 다른 패킷과 번들로 묶이지 않고 대신 즉시 전송됩니다. 이 전달 유형은 대기 시간을 선호하여 멀티플렉싱 효율성을 교환합니다. 여러 Peer.Send()
호출에 동일한 패킷을 사용할 수 없습니다.
PacketFlags.Unthrottled
신뢰할 수 없는 전송을 위해 대기열에 추가된 패킷은 조절로 인해 삭제되지 않고 가능하면 전송되어야 합니다.
PacketFlags.Sent
패킷이 입력한 모든 대기열에서 전송되었습니다.
Event.Type
속성에 대한 이벤트 유형 정의:
EventType.None
지정된 시간 제한 내에 이벤트가 발생하지 않았습니다.
EventType.Connect
Peer.Connect()
함수에 의해 시작된 연결 요청이 완료되었습니다. Event.Peer
성공적으로 연결된 피어를 반환합니다. Event.Data
연결을 설명하는 사용자 제공 데이터를 반환하거나, 사용 가능한 데이터가 없으면 0을 반환합니다.
EventType.Disconnect
피어의 연결이 끊어졌습니다. 이 이벤트는 Peer.Disconnect()
함수에 의해 시작된 연결 해제가 성공적으로 완료되면 생성됩니다. Event.Peer
연결이 끊긴 피어를 반환합니다. Event.Data
연결 해제를 설명하는 사용자 제공 데이터를 반환하거나, 사용 가능한 데이터가 없으면 0을 반환합니다.
EventType.Receive
피어로부터 패킷을 받았습니다. Event.Peer
패킷을 보낸 피어를 반환합니다. Event.ChannelID
패킷이 수신된 채널 번호를 지정합니다. Event.Packet
수신된 패킷을 반환하며, 이 패킷은 사용 후 Event.Packet.Dispose()
함수를 사용하여 파기해야 합니다.
EventType.Timeout
피어가 시간 초과되었습니다. 이 이벤트는 피어가 시간 초과되었거나 Peer.Connect()
에 의해 초기화된 연결 요청이 시간 초과된 경우 발생합니다. Event.Peer
시간이 초과된 피어를 반환합니다.
Peer.State
속성에 대한 피어 상태 정의:
PeerState.Uninitialized
피어가 초기화되지 않았습니다.
PeerState.Disconnected
피어의 연결이 끊어졌거나 시간이 초과되었습니다.
PeerState.Connecting
피어 연결이 진행 중입니다.
PeerState.Connected
피어가 성공적으로 연결되었습니다.
PeerState.Disconnecting
피어 연결 해제가 진행 중입니다.
PeerState.Zombie
피어의 연결이 제대로 끊어지지 않았습니다.
애플리케이션별 이벤트를 제공합니다.
AllocCallback(IntPtr size)
메모리 할당이 요청될 때 이를 알립니다. 새로 할당된 메모리에 대한 포인터가 필요합니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
FreeCallback(IntPtr memory)
메모리를 해제할 수 있는 시기를 알려줍니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
NoMemoryCallback()
메모리가 부족할 때 이를 알려줍니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
패킷별 이벤트를 제공합니다.
PacketFreeCallback(Packet packet)
패킷이 파기될 때 이를 알려줍니다. 신뢰할 수 있는 패킷이 승인되었는지 여부를 나타냅니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
호스트별 이벤트를 제공합니다.
InterceptCallback(ref Event @event, ref Address address, IntPtr receivedData, int receivedDataLength)
원시 UDP 패킷이 차단될 때 이를 알립니다. 이 콜백에서 반환된 상태 코드는 ENet에 설정된 이벤트를 처리하는 방법을 지시합니다. 1을 반환하면 서비스에서 설정된 이벤트를 전달함을 나타냅니다. 0을 반환하면 ENet 하위 시스템이 수신된 데이터를 처리해야 함을 나타냅니다. -1을 반환하면 오류가 있음을 나타냅니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
ChecksumCallback(IntPtr buffers, int bufferCount)
송신 및 수신 시 버퍼에 대해 체크섬을 계산해야 하는 시기를 알립니다. 이 콜백에서 반환되는 값은 64비트 체크섬입니다. 양쪽 끝에서 체크섬 메커니즘이 활성화된 경우 ENet은 자동으로 패킷의 무결성 확인을 처리합니다. ENet.Library.CRC64()
함수와 함께 사용할 수 있습니다. 대리자에 대한 참조는 가비지 수집되지 않도록 유지되어야 합니다.
익명의 호스트 데이터와 포트 번호가 포함된 구조를 포함합니다.
Address.Port
포트 번호를 가져오거나 설정합니다.
Address.GetIP()
IP 주소를 가져옵니다.
Address.SetIP(string ip)
IP 주소를 설정합니다. 로컬 네트워크에서 IPv4 브로드캐스트를 사용하려면 클라이언트의 주소를 255.255.255.255 로 설정할 수 있습니다. ENet은 자동으로 브로드캐스트에 응답하고 주소를 서버의 실제 IP로 업데이트합니다.
Address.GetHost()
주소에서 역방향 조회를 시도합니다. 확인된 이름 또는 IP 주소가 포함된 문자열을 반환합니다.
Address.SetHost(string hostName)
호스트 이름 또는 IP 주소를 설정합니다. 네트워크 인터페이스에 바인딩하거나 외부 호스트에 연결하는 데 사용해야 합니다. 성공하면 true를, 실패하면 false를 반환합니다.
이벤트 유형, 피어에 대한 관리 포인터, 채널 ID, 사용자 제공 데이터 및 패킷에 대한 관리 포인터가 포함된 구조를 포함합니다.
Event.Type
이벤트 유형을 반환합니다.
Event.Peer
연결, 연결 해제, 수신 또는 시간 초과 이벤트를 생성한 피어를 반환합니다.
Event.ChannelID
해당하는 경우 이벤트를 생성한 피어의 채널 ID를 반환합니다.
Event.Data
해당하는 경우 사용자가 제공한 데이터를 반환합니다.
Event.Packet
해당하는 경우 이벤트와 관련된 패킷을 반환합니다.
패킷에 대한 관리되는 포인터를 포함합니다.
Packet.Dispose()
패킷을 파괴합니다. EventType.Receive
이벤트에서 패킷을 얻은 경우에만 호출되어야 합니다.
Packet.IsSet
관리되는 포인터의 상태를 반환합니다.
Packet.Data
패킷 데이터에 대한 관리되는 포인터를 반환합니다.
Packet.UserData
사용자 제공 데이터를 가져오거나 설정합니다.
Packet.Length
패킷의 페이로드 길이를 반환합니다.
Packet.HasReferences
패킷에 대한 참조를 확인합니다.
Packet.SetFreeCallback(PacketFreeCallback callback)
적절한 패킷이 삭제될 때 알리도록 콜백을 설정합니다. 대리자에 대한 참조 대신 콜백에 대한 포인터 IntPtr
사용할 수 있습니다.
Packet.Create(byte[] data, int offset, int length, PacketFlags flags)
피어로 전송될 수 있는 패킷을 생성합니다. offset 매개변수는 배열에 있는 데이터의 시작점을 나타내고, 길이는 배열에 있는 데이터의 끝점을 나타냅니다. 모든 매개변수는 선택사항입니다. 여러 패킷 플래그를 한 번에 지정할 수 있습니다. 바이트 배열에 대한 참조 대신 네이티브 버퍼에 대한 포인터 IntPtr
사용할 수 있습니다.
Packet.CopyTo(byte[] destination)
패킷의 페이로드를 대상 배열로 복사합니다.
피어에 대한 관리형 포인터와 캐시된 ID를 포함합니다.
Peer.IsSet
관리되는 포인터의 상태를 반환합니다.
Peer.ID
피어 ID를 반환합니다. 클라이언트 측에서는 항상 0입니다.
Peer.IP
인쇄 가능한 형식으로 IP 주소를 반환합니다.
Peer.Port
포트 번호를 반환합니다.
Peer.MTU
MTU를 반환합니다.
Peer.State
PeerState
열거형에 설명된 피어 상태를 반환합니다.
Peer.RoundTripTime
왕복 시간을 밀리초 단위로 반환합니다.
Peer.LastRoundTripTime
마지막 승인 이후의 왕복 시간을 밀리초 단위로 반환합니다.
Peer.LastSendTime
마지막 패킷 전송 시간을 밀리초 단위로 반환합니다.
Peer.LastReceiveTime
마지막 패킷 수신 시간을 밀리초 단위로 반환합니다.
Peer.PacketsSent
연결 중에 전송된 총 패킷 수를 반환합니다.
Peer.PacketsLost
재전송 논리를 기반으로 연결 중에 손실된 것으로 간주되는 총 패킷 수를 반환합니다.
Peer.PacketsThrottle
피어에 대한 연결 상태에 따라 패킷 조절 비율을 반환합니다.
Peer.BytesSent
연결 중에 전송된 총 바이트 수를 반환합니다.
Peer.BytesReceived
연결 중에 수신된 총 바이트 수를 반환합니다.
Peer.Data
사용자 제공 데이터를 가져오거나 설정합니다. 적절한 데이터 유형에 대한 명시적 캐스트와 함께 사용해야 합니다.
Peer.ConfigureThrottle(uint interval, uint acceleration, uint deceleration, uint threshold)
피어에 대한 스로틀 매개변수를 구성합니다. 피어에 대한 연결의 다양한 조건에 대한 응답으로 ENet은 신뢰할 수 없는 패킷을 삭제합니다. 스로틀은 신뢰할 수 없는 패킷이 삭제되어 ENet에서 피어로 전송되어서는 안 될 확률을 나타냅니다. 신뢰할 수 있는 패킷 전송부터 승인 수신까지의 최소 평균 왕복 시간은 밀리초 단위로 간격 매개변수에 지정된 시간 동안 측정됩니다. 측정된 왕복 시간이 해당 간격에 걸쳐 측정된 평균 왕복 시간보다 상당히 짧은 경우 가속도 매개변수에 지정된 양( Library.throttleScale
에 대한 비율)만큼 더 많은 트래픽을 허용하도록 스로틀 확률이 증가합니다. Library.throttleScale
상수. 측정된 왕복 시간이 해당 간격에 걸쳐 측정된 평균 왕복 시간보다 상당히 큰 경우 스로틀 확률은 Library.throttleScale
상수. 스로틀 값이 Library.throttleScale
인 경우 ENet에서는 신뢰할 수 없는 패킷이 삭제되지 않으므로 신뢰할 수 없는 모든 패킷이 100% 전송됩니다. 스로틀 값이 0이면 ENet은 신뢰할 수 없는 모든 패킷을 삭제하므로 모든 신뢰할 수 없는 패킷 중 0%가 전송됩니다. 스로틀의 중간 값은 전송되는 신뢰할 수 없는 패킷의 0%에서 100% 사이의 중간 확률을 나타냅니다. 로컬 및 외부 호스트의 대역폭 제한을 고려하여 최상의 조건에서도 이를 초과하면 안 되는 스로틀 확률에 대한 합리적인 제한을 결정합니다. 조절을 비활성화하려면 감속 매개변수를 0으로 설정해야 합니다. 임계값 매개변수는 혼잡한 장소에 있는 Wi-Fi 네트워크의 일반적인 조건인 지터가 높고 평균 대기 시간이 낮은 불안정한 네트워크 환경에서 측정된 왕복 시간을 기준으로 패킷 조절을 줄이는 데 사용할 수 있습니다. 기본적으로 임계값 매개변수는 밀리초 단위로 Library.throttleThreshold
로 설정됩니다.
Peer.Send(byte channelID, ref Packet packet)
보낼 패킷을 대기열에 넣습니다. 성공하면 true를, 실패하면 false를 반환합니다.
Peer.Receive(out byte channelID, out Packet packet)
대기 중인 들어오는 패킷을 큐에서 제거하려고 시도합니다. 패킷이 대기열에서 제거되면 true를 반환하고, 사용 가능한 패킷이 없으면 false를 반환합니다.
Peer.Ping()
피어에게 ping 요청을 보냅니다. ENet은 연결된 모든 피어를 정기적으로 자동으로 핑하지만, 이 기능은 더 자주 핑 요청을 보장하기 위해 호출될 수 있습니다.
Peer.PingInterval(uint interval)
핑이 피어에 전송되는 간격을 설정합니다. 핑은 연결의 활성 상태를 모니터링하고 트래픽이 적은 기간 동안 스로틀을 동적으로 조정하여 트래픽 급증 중에 스로틀이 합리적인 응답성을 갖도록 하는 데 사용됩니다.
Peer.Timeout(uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum)
피어에 대한 시간 초과 매개변수를 설정합니다. 시간 초과 매개변수는 피어가 신뢰할 수 있는 트래픽을 승인하지 못해 시간 초과되는 방법과 시기를 제어합니다. 반선형 메커니즘에 사용되는 시간 초과 값. 여기서 신뢰할 수 있는 패킷은 시간 초과가 설정된 제한에 도달할 때까지 평균 왕복 시간과 변동 허용 오차를 더한 시간 내에 승인되지 않습니다. 따라서 시간 초과가 이 제한에 있고 신뢰할 수 있는 패킷이 전송되었지만 특정 최소 시간 내에 확인되지 않은 경우 피어의 연결이 끊어집니다. 또는 신뢰할 수 있는 패킷이 전송되었지만 특정 최대 시간 동안 승인되지 않은 경우 현재 시간 초과 제한 값에 관계없이 피어의 연결이 끊어집니다.
Peer.Disconnect(uint data)
피어와의 연결 해제를 요청합니다.
Peer.DisconnectNow(uint data)
피어와의 연결을 즉시 강제로 끊습니다.
Peer.DisconnectLater(uint data)
피어와의 연결 끊기를 요청하지만 대기 중인 모든 나가는 패킷이 전송된 후에만 가능합니다.
Peer.Reset()
강제로 피어 연결을 끊습니다. 피어가 나타내는 외부 호스트는 연결 끊김에 대한 알림을 받지 않으며 로컬 호스트에 대한 연결 시간이 초과됩니다.
호스트에 대한 관리되는 포인터를 포함합니다.
Host.Dispose()
호스트를 파괴합니다.
Host.IsSet
관리되는 포인터의 상태를 반환합니다.
Host.PeersCount
연결된 피어 수를 반환합니다.
Host.PacketsSent
세션 중에 전송된 총 패킷 수를 반환합니다.
Host.PacketsReceived
세션 중에 수신된 총 패킷 수를 반환합니다.
Host.BytesSent
세션 중에 전송된 총 바이트 수를 반환합니다.
Host.BytesReceived
세션 중에 수신된 총 바이트 수를 반환합니다.
Host.Create(Address? address, int peerLimit, int channelLimit, uint incomingBandwidth, uint outgoingBandwidth, int bufferSize)
피어와 통신하기 위한 호스트를 생성합니다. 대역폭 매개변수는 특정 시간에 전송될 수 있는 신뢰할 수 있는 패킷 수를 제한하는 연결 창 크기를 결정합니다. ENet은 호스트 대역폭이 과부하되지 않도록 호스트 간 연결의 특정 측면에서 전략적으로 패킷을 삭제합니다. 버퍼 크기 매개변수는 데이터그램을 보내고 받기 위한 소켓 버퍼 크기를 설정하는 데 사용됩니다. 함수가 들어오는 연결을 수신하는 호스트를 생성하는 데 사용되는 경우 주소 및 피어 제한을 제외한 모든 매개 변수는 선택 사항입니다.
Host.PreventConnections(bool state)
새로 들어오는 연결에 대해 호스트에 대한 액세스를 방지합니다. 이 기능은 호스트를 네트워크에서 완전히 보이지 않게 만들고, 호스트에 연결을 시도하는 모든 피어는 시간 초과됩니다.
Host.Broadcast(byte channelID, ref Packet packet, Peer[] peers)
선택적 피어 매개변수가 사용되지 않는 경우 일련의 피어 또는 호스트와 연결된 모든 피어에 전송되도록 패킷을 대기열에 넣습니다. 배열의 0인 Peer
구조는 브로드캐스트에서 제외됩니다. 배열 대신 단일 Peer
함수에 전달하여 브로드캐스트에서 제외할 수 있습니다.
Host.CheckEvents(out Event @event)
호스트에서 대기 중인 이벤트를 확인하고 가능한 경우 이벤트를 전달합니다. 이벤트가 전달되면 > 0, 사용 가능한 이벤트가 없으면 0, 실패하면 < 0을 반환합니다.
Host.Connect(Address address, int channelLimit, uint data)
외부 호스트에 대한 연결을 시작합니다. 성공 시 외부 호스트를 나타내는 피어를 반환하고, 실패 시 예외를 발생시킵니다. 반환된 피어는 Host.Service()
가 EventType.Connect
이벤트를 알릴 때까지 연결을 완료하지 않습니다. 채널 제한 및 사용자 제공 데이터 매개변수는 선택 사항입니다.
Host.Service(int timeout, out Event @event)
지정된 호스트에서 이벤트를 기다리고 호스트와 해당 피어 간에 패킷을 셔틀합니다. ENet은 폴링 이벤트 모델을 사용하여 중요한 이벤트를 사용자에게 알립니다. ENet 호스트는 이 기능을 사용하여 이벤트에 대해 폴링됩니다. 여기서 선택적인 시간 초과 값(밀리초)을 지정하여 ENet이 폴링하는 기간을 제어할 수 있습니다. 시간 제한을 0으로 지정한 경우 전달할 이벤트가 없으면 이 함수는 즉시 반환됩니다. 그렇지 않고 지정된 제한 시간 내에 이벤트가 전달되면 1을 반환합니다. 이 함수는 패킷이 전송되고 수신되는지 확인하기 위해 정기적으로 호출되어야 합니다. 그렇지 않으면 트래픽 급증이 발생하여 대기 시간이 늘어납니다. 0으로 설정된 타임아웃 매개변수는 게임 루프에서 함수가 호출되는 경우에 필요한 비차단을 의미합니다.
Host.SetBandwidthLimit(uint incomingBandwidth, uint outgoingBandwidth)
호스트의 대역폭 제한을 초당 바이트 단위로 조정합니다.
Host.SetChannelLimit(int channelLimit)
향후 들어오는 연결의 최대 허용 채널을 제한합니다.
Host.SetMaxDuplicatePeers(ushort number)
동일한 호스트에서 허용되는 최대 중복 피어를 제한하고 초과할 경우 연결을 방지합니다. 기본적으로 Library.maxPeers
로 설정되며 1보다 작을 수 없습니다.
Host.SetInterceptCallback(InterceptCallback callback)
원시 UDP 패킷이 차단될 때 알리도록 콜백을 설정합니다. 대리자에 대한 참조 대신 콜백에 대한 포인터 IntPtr
사용할 수 있습니다.
Host.SetChecksumCallback(ChecksumCallback callback)
체크섬을 계산해야 할 때 알리도록 콜백을 설정합니다. 대리자에 대한 참조 대신 콜백에 대한 포인터 IntPtr
사용할 수 있습니다.
Host.Flush()
지정된 호스트에 대기 중인 모든 패킷을 지정된 피어로 보냅니다.
상수 필드를 포함합니다.
Library.maxChannelCount
가능한 최대 채널 수입니다.
Library.maxPeers
가능한 최대 피어 수입니다.
Library.maxPacketSize
패킷의 최대 크기입니다.
Library.version
네이티브 라이브러리에 상대적인 현재 호환성 버전입니다.
Library.Time
현재 로컬 단조 시간을 밀리초 단위로 반환합니다. 애플리케이션이 활성 상태인 동안에는 재설정되지 않습니다.
Library.Initialize(Callbacks callbacks)
네이티브 라이브러리를 초기화합니다. 콜백 매개변수는 선택사항이며 사용자 정의 메모리 할당자와 함께만 사용해야 합니다. 작업을 시작하기 전에 전화해야 합니다. 성공하면 true를, 실패하면 false를 반환합니다.
Library.Deinitialize()
네이티브 라이브러리를 초기화 해제합니다. 작업이 완료된 후 호출해야 합니다.
Library.CRC64(IntPtr buffers, int bufferCount)
관리되지 않는 버퍼에 대한 체크섬을 계산합니다.
이 프로젝트는 다음이 후원합니다:
날다람쥐 엔터테인먼트
제곱근 스튜디오
이상한 루프 게임