Example #1
0
        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();
            }
        }
Example #2
0
        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);
            }
        }