public JobHandle ScheduleReceive(NetworkPacketReceiver receiver, JobHandle dep) { var job = new ReceiveJob { receiver = receiver, socket = m_UserData[0] }; return(job.Schedule(dep)); }
public JobHandle ScheduleReceive <T>(T receiver, JobHandle dep) where T : struct, INetworkPacketReceiver { var job = new ReceiveJob <T> { receiver = receiver, socket = m_SocketHandle }; return(job.Schedule(dep)); }
public JobHandle ScheduleReceive(NetworkPacketReceiver receiver, JobHandle dep) { var job = new ReceiveJob { Baselib = m_Baselib, Rx = m_PayloadsRx, Receiver = receiver }; return(job.Schedule(dep)); }
public JobHandle ScheduleReceive <T>(T receiver, JobHandle dep) where T : struct, INetworkPacketReceiver { var sendJob = new SendUpdate { ipcManager = IPCManager.Instance, ipcQueue = m_IPCQueue }; var job = new ReceiveJob <T> { receiver = receiver, ipcManager = IPCManager.Instance, localEndPoint = m_LocalEndPoint[0] }; dep = job.Schedule(JobHandle.CombineDependencies(dep, IPCManager.ManagerAccessHandle)); dep = sendJob.Schedule(dep); IPCManager.ManagerAccessHandle = dep; return(dep); }
///<summary>Handle messages, and update message and network state.</summary> void Update() { // Finish up last frame's jobs. receiveJobHandle.Complete(); for (var i = 0; i < sendJobHandles.Length; ++i) { sendJobHandles[i].Complete(); sentMessages[i].Dispose(); } sentMessages.RemoveRange(0, sendJobHandles.Length); // Process received messages on the main thread. var messageCount = receivedMessages.Count; for (var i = 0; i < messageCount; ++i) { Handle(receivedMessages[i]); } receivedMessages.RemoveRange(0, messageCount); // Schedule new network event reception job. var receiveJob = new ReceiveJob { driver = driver, connection = connection, }; receiveJobHandle = driver.ScheduleUpdate(); receiveJobHandle = receiveJob.Schedule(receiveJobHandle); // Schedule message queue sending jobs. sendJobHandles = new JobHandle[sentMessages.Count]; for (var i = 0; i < sentMessages.Count; ++i) { sendJobHandles[i] = receiveJobHandle = new SendJob { driver = driver, connection = connection, message = sentMessages[i] }.Schedule(receiveJobHandle); } JobHandle.ScheduleBatchedJobs(); ReliableMessage.Update(); }
public void ReceiveInJobWorks() { var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 }); serverDriver.Bind(IPCManager.Instance.CreateEndPoint()); serverDriver.Listen(); var clientDriver = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 }); var clientToServer = clientDriver.Connect(serverDriver.LocalEndPoint()); WaitForConnected(clientDriver, serverDriver, clientToServer); var strmWriter = new DataStreamWriter(4, Allocator.Temp); strmWriter.Write(42); clientToServer.Send(clientDriver, strmWriter); strmWriter.Dispose(); clientDriver.ScheduleUpdate().Complete(); var serverToClient = new NativeArray <NetworkConnection>(1, Allocator.TempJob); var result = new NativeArray <int>(1, Allocator.TempJob); var recvJob = new ReceiveJob { driver = serverDriver, connections = serverToClient, result = result }; Assert.AreNotEqual(42, result[0]); var acceptJob = new AcceptJob { driver = serverDriver, connections = serverToClient }; recvJob.Schedule(serverDriver.ScheduleUpdate(acceptJob.Schedule())).Complete(); Assert.AreEqual(42, result[0]); result.Dispose(); serverToClient.Dispose(); clientDriver.Dispose(); serverDriver.Dispose(); }