Ejemplo n.º 1
0
        /// <summary>
        /// Symbol processing thread method
        /// </summary>
        static void SymbolLoop()
        {
            Console.WriteLine("[SYMBOL] Started");

            Socket s = new Socket(SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // Connect socket
                s.Connect(IP, SymbolPort);
                Console.WriteLine("[SYMBOL] Connected to {0}:{1}", IP, SymbolPort.ToString());

                // Send nanomsg init message
                s.Send(nninit);

                // Check nanomsg response
                byte[] res      = new byte[8];
                int    bytesRec = s.Receive(res);
                if (res.SequenceEqual(nnires))
                {
                    Console.WriteLine("[SYMBOL] Nanomsg OK");
                }
                else
                {
                    string resHex = BitConverter.ToString(res);
                    Console.WriteLine("[SYMBOL] Nanomsg error: {0} (Expected: {1})", resHex, BitConverter.ToString(nnires));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("[SYMBOL] Failed to connect");
                Stop();
                return;
            }

            while (true)
            {
                byte[] dres     = new byte[65536];
                int    numbytes = s.Receive(dres);

                // Kill thread if no data received
                if (numbytes == 0)
                {
                    Console.WriteLine("[SYMBOL] No data");
                    Stop();
                    return;
                }

                List <Point> points = new List <Point>();

                // Loop through bytes 2 at a time, skipping first 8
                for (int i = 8; i < 2048; i = i + 2)
                {
                    sbyte symI = (sbyte)dres[i];
                    sbyte symQ = (sbyte)dres[i + 1];

                    // Ignore null values
                    if (symI != '\0' && symQ != '\0')
                    {
                        points.Add(new Point(symI, symQ));
                    }
                }

                // Update UI
                Program.MainWindow.DrawSymbols(points);

                Thread.Sleep(10);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Symbol processing thread method
        /// </summary>
        static void SymbolLoop()
        {
            string logsrc = "SYMBOL";

            Program.Log(logsrc, "START");

            Socket s = new Socket(SocketType.Stream, ProtocolType.Tcp);

            Program.Log(logsrc, "Socket created");

            try
            {
                // Connect socket
                s.Connect(IP, SymbolPort);
                Program.Log(logsrc, string.Format("Connected to {0}:{1}", IP, SymbolPort.ToString()));

                // Send nanomsg init message
                s.Send(nninit);

                // Check nanomsg response
                byte[] res      = new byte[8];
                int    bytesRec = s.Receive(res);
                if (res.SequenceEqual(nnires))
                {
                    Program.Log(logsrc, "nanomsg OK");
                }
                else
                {
                    string resHex = BitConverter.ToString(res);
                    Program.Log(logsrc, string.Format("nanomsg error: {0} (Expected: {1})", resHex, BitConverter.ToString(nnires)));
                }
            }
            catch (Exception e)
            {
                Program.Log(logsrc, "Failed to connect");
                Stop();
                return;
            }

            byte[] dres = new byte[65536];
            int    num;

            while (true)
            {
                // Receive message content
                num = s.Receive(dres);

                // Kill thread if no data received
                if (num == 0)
                {
                    Program.Log(logsrc, "Connection lost/no data, killing thread");

                    // Reset UI and alert user
                    Program.MainWindow.ResetUI();
                    if (Program.BigWindow.Visible)
                    {
                        Program.BigWindow.ResetUI();
                    }
                    System.Windows.Forms.MessageBox.Show("Lost connection to goesrecv", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);

                    // Stop all threads
                    Stop();
                    return;
                }

                // Update UI
                Program.MainWindow.DrawSymbols(dres);

                Thread.Sleep(10);
            }
        }