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