public void RunPubJob()
 {
     if (pubTimer.HasElapsed() >= 10)
     {
         if (zmqPubSocket != null)
         {
             StatusMessage statusMsg = new StatusMessage();
             lock (pubLockObj)
             {
                 foreach (KeyValuePair <int, float> x in encoderMap)
                 {
                     ValueMessage v = new ValueMessage {
                         Id = x.Key, Value = x.Value
                     };
                     statusMsg.Encoders.Add(v);
                 }
                 foreach (KeyValuePair <int, float> x in accelerometerMap)
                 {
                     ValueMessage v = new ValueMessage {
                         Id = x.Key, Value = x.Value
                     };
                     statusMsg.Accelerometers.Add(v);
                 }
                 foreach (KeyValuePair <int, float> x in gyroscopeMap)
                 {
                     ValueMessage v = new ValueMessage {
                         Id = x.Key, Value = x.Value
                     };
                     statusMsg.Gyroscopes.Add(v);
                 }
                 foreach (KeyValuePair <int, float> x in advancedMap)
                 {
                     ValueMessage v = new ValueMessage {
                         Id = x.Key, Value = x.Value
                     };
                     statusMsg.Advanced.Add(v);
                 }
             }
             Console.WriteLine("Sending");
             zmqPubSocket.Send(new ZFrame(statusMsg.ToByteArray()));
         }
         else
         {
             Interlocked.Increment(ref pubFailCount);
             if (pubFailCount >= 100)
             {
                 ReInitPubSocket();
             }
         }
         pubTimer.Start();
     }
 }
        public void RunRepJob()
        {
            if (repTimer.HasElapsed() >= 1)
            {
                if (zmqRepSocket != null)
                {
                    using (ZFrame request = zmqRepSocket.ReceiveFrame(ZSocketFlags.DontWait, out ZError zErr))
                    {
                        if (zErr == ZError.None && request.Length > 0)
                        {
                            try
                            {
                                byte[]         b  = request.Read();
                                ControlMessage cM = ControlMessage.Parser.ParseFrom(b);

                                lock (repLockObj)
                                {
                                    foreach (var motor in cM.Motors)
                                    {
                                        motorMap[motor.Id] = motor.Value;
                                    }
                                }
                                zmqRepSocket.Send(new ZFrame("A"));
                            }
                            catch { }
                        }
                    }
                }
                else
                {
                    Interlocked.Increment(ref repFailCount);
                    if (repFailCount >= 100)
                    {
                        ReInitRepSocket();
                    }
                }
                repTimer.Start();
            }
        }