พื้นที่เก็บข้อมูลนี้จัดเตรียม C# abstraction ที่ได้รับการจัดการของไลบรารี GameNetworkingSockets ซึ่งสร้างและดูแลโดย Valve Software คุณจะต้องสร้างไลบรารีเนทิฟที่มีการขึ้นต่อกันที่จำเป็นทั้งหมดก่อนที่จะเริ่มต้น
โครงการกำลังอัปเดตตามการเผยแพร่ของไลบรารีดั้งเดิม
สามารถสร้างแอสเซมบลีที่มีการจัดการได้โดยใช้แพลตฟอร์มการคอมไพล์ที่มีอยู่ซึ่งรองรับ C# 3.0 หรือสูงกว่า
กำหนด VALVESOCKETS_SPAN
เพื่อเปิดใช้งานการสนับสนุนสำหรับ Span โปรดทำตามขั้นตอนเหล่านี้เพื่อเปิดใช้งานการเข้าถึงบล็อกหน่วยความจำดั้งเดิมอย่างรวดเร็วและปรับปรุงประสิทธิภาพ
ก่อนที่จะเริ่มทำงาน ควรเริ่มต้นไลบรารีโดยใช้ Valve.Sockets.Library.Initialize();
การทำงาน.
หลังจากงานเสร็จสิ้น ให้ยกเลิกการเริ่มต้นไลบรารีโดยใช้ Valve.Sockets.Library.Deinitialize();
การทำงาน.
เซิร์ฟเวอร์ NetworkingSockets = ใหม่ NetworkingSockets();uint pollGroup = server.CreatePollGroup();StatusCallback status = (อ้างอิงข้อมูล StatusInfo) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connecting:server .AcceptConnection(info.connection);server.SetConnectionPollGroup(กลุ่มสำรวจความคิดเห็น, 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(สถานะ);ที่อยู่ที่อยู่ = ที่อยู่ใหม่();address.SetAddress("::0", พอร์ต) ;uint ListenSocket = 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 = NetworkingMessage ใหม่ [maxMessages];#endif While (!Console.KeyAvailable) {server.RunCallbacks(); #if VALVESOCKETS_SPANserver.ReceiveMessagesOnPollGroup (pollGroup, ข้อความ, 20); #else int netMessagesCount = server.ReceiveMessagesOnPollGroup (pollGroup, netMessages, maxMessages); if (netMessagesCount > 0) {สำหรับ (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 status = (อ้างอิงข้อมูล StatusInfo) => {switch (info.connectionInfo.state) {case ConnectionState.None:break;case ConnectionState.Connected:Console.WriteLine(" ไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ - ID: " + การเชื่อมต่อ);break;case ConnectionState.ClosedByPeer:case ConnectionState.ProblemDetectedLocally:client.CloseConnection(connection);Console.WriteLine("ไคลเอ็นต์ถูกตัดการเชื่อมต่อจากเซิร์ฟเวอร์");break;}};utils.SetStatusCallback(สถานะ);ที่อยู่ที่อยู่ = ที่อยู่ใหม่();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];#endif While (!Console.KeyAvailable) {client.RunCallbacks(); #if VALVESOCKETS_SPANclient.ReceiveMessagesOnConnection (การเชื่อมต่อ ข้อความ 20); #else int netMessagesCount = client.ReceiveMessagesOnConnection (การเชื่อมต่อ, 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);}
ไบต์ [] data = ไบต์ใหม่ [64]; sockets.SendMessageToConnection (การเชื่อมต่อข้อมูล);
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; netMessage.CopyTo (บัฟเฟอร์);
DebugCallback debug = (ประเภท ข้อความ) => {Console.WriteLine ("Debug - ประเภท: " + ประเภท + ", ข้อความ: " + ข้อความ);};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
ตัวระบุ Steam
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
ล้มเหลวในการเชื่อมต่อเครือข่าย
Result.InvalidParam
พารามิเตอร์ไม่ถูกต้อง
Result.InvalidState
วัตถุที่เรียกว่าอยู่ในสถานะที่ไม่ถูกต้อง
Result.Ignored
เป้าหมายที่ถูกละเว้นกำลังละเว้นผู้ส่ง
จัดเตรียมเหตุการณ์ต่อซ็อกเก็ต
StatusCallback(ref StatusInfo info)
แจ้งเตือนเมื่อกลไกการจัดส่งบนซ็อกเก็ตการฟังส่งกลับสถานะการเชื่อมต่อ การอ้างอิงถึงผู้รับมอบสิทธิ์ควรเก็บไว้ไม่ให้ถูกรวบรวมขยะ
จัดให้มีเหตุการณ์ต่อแอปพลิเคชัน
DebugCallback(DebugType type, string message)
แจ้งเตือนเมื่อมีข้อมูลการดีบักพร้อมคำฟุ่มเฟือยที่ต้องการเกิดขึ้น การอ้างอิงถึงผู้รับมอบสิทธิ์ควรเก็บไว้ไม่ให้ถูกรวบรวมขยะ
ประกอบด้วยข้อมูลที่จัดเรียงพร้อมที่อยู่ IP และหมายเลขพอร์ต
Address.ip
ที่อยู่ IP เป็นไบต์
ที่อยู่หมายเลขพอร์ต Address.port
Address.IsLocalHost
ตรวจสอบว่าข้อมูลระบุตัวตนเป็น 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
การรวมกันของข้อมูลการกำหนดค่า
ประกอบด้วยข้อมูลที่จัดเรียงพร้อมสถานะการเชื่อมต่อ
ID การเชื่อมต่อ StatusInfo.connection
StatusInfo.connectionInfo
คือโครงสร้าง ConnectionInfo
ที่มีข้อมูลที่จัดเรียงไว้
ประกอบด้วยข้อมูลที่จัดเรียงพร้อมข้อมูลการเชื่อมต่อ
ตัวระบุ ConnectionInfo.identity
ของจุดสิ้นสุด
ข้อมูลที่ผู้ใช้ระบุ ConnectionInfo.userData
ที่ตั้งค่าโดยใช้ฟังก์ชัน NetworkingSockets.SetConnectionUserData()
ConnectionInfo.listenSocket
Listen Socket สำหรับการเชื่อมต่อนี้
ConnectionInfo.address
ที่อยู่ระยะไกลของจุดสิ้นสุด
ConnectionInfo.state
สถานะระดับสูงของการเชื่อมต่อที่อธิบายในการแจงนับ ConnectionState
ConnectionInfo.endReason
สาเหตุพื้นฐานของการยุติการเชื่อมต่อหรือปัญหา
คำอธิบาย ConnectionInfo.endDebug
ในรูปแบบที่มนุษย์สามารถอ่านได้สำหรับการยุติการเชื่อมต่อหรือปัญหา ข้อมูลนี้มีไว้เพื่อวัตถุประสงค์ในการวินิจฉัยเท่านั้น ไม่ใช่เพื่อแสดงต่อผู้ใช้ อาจมีรายละเอียดบางอย่างเกี่ยวกับปัญหาโดยเฉพาะ
คำอธิบายดีบัก ConnectionInfo.connectionDescription
รวมถึงหมายเลขอ้างอิงการเชื่อมต่อ ประเภทการเชื่อมต่อ และข้อมูลเพียร์
ประกอบด้วยข้อมูลที่จัดเรียงพร้อมสถานะการเชื่อมต่อสำหรับการร้องขอบ่อยครั้ง
ConnectionStatus.state
สถานะระดับสูงของการเชื่อมต่อที่อธิบายไว้ในการแจงนับ ConnectionState
ConnectionStatus.ping
ค่า 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 ID
NetworkingIdentity.SetSteamID(ulong steamID)
ตั้งค่า Steam ID
ประกอบด้วยข้อมูลที่จัดเรียงของข้อความเครือข่าย
ตัวระบุ 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)
สร้างซ็อกเก็ตที่มีการกำหนดค่าเพิ่มเติม และส่งกลับ ID ซ็อกเก็ตที่รับฟังการเชื่อมต่อขาเข้าซึ่งเริ่มต้นโดยฟังก์ชัน NetworkingSockets.Connect()
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 มิฉะนั้น ข้อมูลที่เชื่อถือได้จะไม่ถูกล้าง หากการเชื่อมต่อสิ้นสุดลงแล้ว รหัสเหตุผล สตริงการดีบัก และพารามิเตอร์คงค้างจะถูกละเว้น คืนค่าจริงเมื่อสำเร็จหรือคืนค่าเท็จเมื่อล้มเหลว
NetworkingSockets.CloseListenSocket(ListenSocket socket, string remoteReason)
ทำลายซ็อกเก็ต Listen และซ็อกเก็ตไคลเอ็นต์ทั้งหมดที่สร้างขึ้นโดยการยอมรับการเชื่อมต่อบนซ็อกเก็ต Listen เหตุผลระยะไกลกำหนดว่าจะดำเนินการล้างข้อมูลใดบนซ็อกเก็ตไคลเอ็นต์ที่ถูกทำลาย หากมีการร้องขอการล้างข้อมูลและผู้ใช้ร้องขอซ็อกเก็ต Listen ที่เชื่อมโยงกับพอร์ตในเครื่องเฉพาะเพื่ออำนวยความสะดวกในการเชื่อมต่อ 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 ในเครื่องและหมายเลขพอร์ตของซ็อกเก็ต Listen คืนค่าจริงเมื่อสำเร็จหรือคืนค่าเท็จเมื่อล้มเหลว
NetworkingSockets.CreateSocketPair(Connection connectionLeft, Connection connectionRight, bool useNetworkLoopback, ref NetworkingIdentity identityLeft, ref NetworkingIdentity identityRight)
สร้างคู่ของการเชื่อมต่อที่กำลังพูดคุยกัน เช่น การสื่อสารแบบย้อนกลับ การเชื่อมต่อทั้งสองจะเข้าสู่สถานะเชื่อมต่อทันที และจะไม่มีการเรียกกลับ หลังจากนี้ ถ้าการเชื่อมต่อใดการเชื่อมต่อหนึ่งถูกปิด การเชื่อมต่ออื่นจะได้รับการติดต่อกลับ เหมือนกับว่าพวกเขากำลังสื่อสารผ่านเครือข่าย ตามค่าเริ่มต้น บัฟเฟอร์ภายในจะถูกใช้งาน เลี่ยงเครือข่ายโดยสมบูรณ์ การตัดข้อความลงในแพ็คเก็ต การเข้ารหัส การคัดลอกเพย์โหลด ฯลฯ ซึ่งหมายความว่าตามค่าเริ่มต้นแล้ว แพ็กเก็ตแบบย้อนกลับจะไม่จำลองความล่าช้าหรือการสูญเสีย พารามิเตอร์ลูปแบ็คเครือข่ายที่เปิดใช้งานจะทำให้คู่ซ็อกเก็ตส่งแพ็กเก็ตผ่านอุปกรณ์ลูปแบ็คเครือข่ายท้องถิ่นบนพอร์ตชั่วคราว ในกรณีนี้รองรับความล่าช้าและการสูญเสียปลอม และเวลา CPU ถูกใช้ไปในการเข้ารหัสและถอดรหัส
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
enumerations พารามิเตอร์ค่าควรอ้างอิงถึงค่าจริง
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
enumerations
ประกอบด้วยเขตข้อมูลคงที่
Library.maxCloseMessageLength
ความยาวสูงสุดของสตริงเหตุผลเป็นไบต์เมื่อปิดการเชื่อมต่อ
Library.maxMessageSize
ขนาดสูงสุดของข้อความเดียวที่สามารถส่งได้
Library.Initialize(ref NetworkingIdentity identity, StringBuilder errorMessage)
เตรียมใช้งานไลบรารีดั้งเดิมด้วยข้อมูลเฉพาะตัวที่เป็นทางเลือกที่จะเชื่อมโยงกับซ็อกเก็ต พารามิเตอร์ข้อความแสดงข้อผิดพลาดเป็นทางเลือก และควรใช้เพื่อระบุข้อผิดพลาดระหว่างการกำหนดค่าเริ่มต้น ความจุของสตริงที่ไม่แน่นอนสำหรับข้อความแสดงข้อผิดพลาดจะต้องเท่ากับ Library.maxErrorMessageLength
Library.Deinitialize()
deinitializes ไลบรารีดั้งเดิม ควรเรียกหลังเลิกงาน