コード例 #1
0
        public JobHandle ScheduleReceive(NetworkPacketReceiver receiver, JobHandle dep)
        {
            var job = new ReceiveJob {
                receiver = receiver, socket = m_UserData[0]
            };

            return(job.Schedule(dep));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        public JobHandle ScheduleReceive(NetworkPacketReceiver receiver, JobHandle dep)
        {
            var job = new ReceiveJob
            {
                Baselib  = m_Baselib,
                Rx       = m_PayloadsRx,
                Receiver = receiver
            };

            return(job.Schedule(dep));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        ///<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();
        }
コード例 #6
0
        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();
        }