///<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(); }
///<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(); }