internal NetworkLinker(NetworkLinkerHandle handle, UdpCNetworkDriver driver, NetworkConnection connection, int targetPacketSize) { this.handle = handle; this.driver = driver; this.connection = connection; this.targetPacketSize = targetPacketSize; seqNumbers = new NativeArray <ushort> (5, Allocator.Persistent); flags = new NativeArray <byte> (3, Allocator.Persistent); latencyLog = new NativeArray <ushort> (16, Allocator.Persistent); uncheckedSelfReliablePackets = new List <UncheckedReliablePacket> (16); uncheckedRecieveReliableDataStream = new DataStreamWriter(ushort.MaxValue, Allocator.Persistent); tempRecieveReliableDataStream = new DataStreamWriter(ushort.MaxValue, Allocator.Persistent); dataStreams = new NativeList <DataStreamReader> (32, Allocator.Persistent); uncheckedreliableStreams = new NativeList <DataStreamReader> (32, Allocator.Persistent); packetChunksQosTable = new DataStreamWriter[(int)QosType.ChunkEnd - 1]; packetLengthsQosTable = new NativeList <ushort> [(int)QosType.ChunkEnd - 1]; for (int i = 0; i < (int)QosType.ChunkEnd - 1; i++) { packetChunksQosTable[i] = new DataStreamWriter(ushort.MaxValue, Allocator.Persistent); packetLengthsQosTable[i] = new NativeList <ushort> (4, Allocator.Persistent); packetLengthsQosTable[i].Add(default);
// サーバーから切断されたらLinkerを破棄して停止 public override void StopComplete() { playerId = 0; state = State.Offline; jobHandle.Complete(); //var linker = NetworkLinkerPool.GetLinker (networkLinkerHandle); //driver.Disconnect (linker.connection); //ここはserverからDisconnectされたら行う処理 NetworkLinkerPool.ReleaseLinker(networkLinkerHandle); networkLinkerHandle = default; Debug.Log("StopComplete"); }
public static bool ReleaseLinker(NetworkLinkerHandle linkerHandle) { int handle = linkerHandle.m_linkerId - 1; if (0 <= handle && handle < networkLinkers.Count && networkLinkers[handle] != null) { networkLinkers[handle].Dispose(); networkLinkers[handle] = null; return(true); } else { Debug.LogError("Handle=" + linkerHandle.m_linkerId + "は存在しないか、解放済みのLinekerです"); return(false); } }
public static NetworkLinkerHandle CreateLinkerHandle(UdpCNetworkDriver driver, NetworkConnection connection) { NetworkLinkerHandle handle; for (int i = 0; i < networkLinkers.Count; i++) { if (networkLinkers[i] == null) { handle = new NetworkLinkerHandle(i + 1); networkLinkers[i] = new NetworkLinker(handle, driver, connection, MTU); return(handle); } } handle = new NetworkLinkerHandle(networkLinkers.Count + 1); networkLinkers.Add(new NetworkLinker(handle, driver, connection, MTU)); return(handle); }
/// <summary> /// クライアント接続開始 /// </summary> public void Start(IPAddress adress, int port) { serverAdress = adress; serverPort = port; if (!driver.IsCreated) { var parm = new NetworkConfigParameter() { connectTimeoutMS = 1000 * 5, disconnectTimeoutMS = 1000 * 5, }; driver = new UdpCNetworkDriver(new INetworkParameter[] { parm }); } var endpoint = new IPEndPoint(serverAdress, port); state = State.Connecting; networkLinkerHandle = NetworkLinkerPool.CreateLinkerHandle(driver, driver.Connect(endpoint)); Debug.Log("StartClient"); }
public static NetworkLinker GetLinker(NetworkLinkerHandle linkerHandle) { return(networkLinkers[linkerHandle.m_linkerId - 1]); }