private void OnDisable() { if (hasConnected) { hasConnected = false; isConnecting = false; // 3: Dismiss connection var hs = new ACHandshaker(0, 1, 3); var hsPacketSize = Marshal.SizeOf <ACHandshaker>(); var packet = new byte[hsPacketSize]; var ptr = Marshal.AllocHGlobal(hsPacketSize); Marshal.StructureToPtr(hs, ptr, true); Marshal.Copy(ptr, packet, 0, hsPacketSize); client.Send(packet, packet.Length, acEndPoint); Marshal.FreeHGlobal(ptr); Debug.Log("Successfully unsubscribed"); logStreamWriter?.Dispose(); } }
IEnumerator HandshakeStart() { Debug.Log("Initiating handshake"); isConnecting = true; var hs = new ACHandshaker(0, 1, 0); var hsPacketSize = Marshal.SizeOf <ACHandshaker>(); var packet = new byte[hsPacketSize]; var ptr = Marshal.AllocHGlobal(hsPacketSize); Marshal.StructureToPtr(hs, ptr, true); Marshal.Copy(ptr, packet, 0, hsPacketSize); try { client.Send(packet, packet.Length, acEndPoint); } catch (Exception e) { Debug.Log(e); isConnecting = false; yield break; } var listeningTask = client.ReceiveAsync(); while (!listeningTask.IsCompleted) { yield return(null); } var hsResponse = FromBytes <ACHandshackerResponse>(listeningTask.Result.Buffer); Debug.Log(hsResponse.ToString()); // Subscribe hs.operationId = 1; Marshal.StructureToPtr(hs, ptr, true); Marshal.Copy(ptr, packet, 0, hsPacketSize); client.Send(packet, packet.Length, acEndPoint); Marshal.FreeHGlobal(ptr); isConnecting = false; hasConnected = true; if (logGForceToFile) { var logFilePath = Path.Combine(logFolder, $"{DateTime.Now:yyyyMMdd-hh-mm-ss-ff}.csv"); logStreamWriter = File.AppendText(logFilePath); logStreamWriter.WriteLine("lap_time,horizontal,longitudinal"); } Task.Run(ListenToUpdate); while (hasConnected) { lock (infoLock) { airDriVrTestController.SetGForce( info.accG_horizontal * horizontalMultipler, -info.accG_frontal * longitudinalMultiplier); infoText.text = info.ToString(); } yield return(null); } }