Esempio n. 1
0
        ///<summary>Set up listeners and data structures, and connect to server.</summary>
        void Start()
        {
            Listen <ConnectServerMessage>(message => connectionID         = message.id);
            Listen <JoinMessage>(message => playerConnections[message.id] = message.name);
            Listen <PingMessage>(message => message.Send());
            driver     = new BasicNetworkDriver <IPv4UDPSocket>(new INetworkParameter[0]);
            connection = new NativeArray <NetworkConnection>(1, Allocator.Persistent);
            var endpoint = new IPEndPoint(IPAddress.Parse(remoteIP), 54889);

            connection[0] = driver.Connect(endpoint);
            Debug.Log($"C: Connecting to {endpoint}…");
            ReliableMessage.Start();
        }
Esempio n. 2
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();
        }