Example #1
0
        /// <summary>
        /// 配置队列线程
        /// </summary>
        private void ConfigQueueThread()
        {
            String appName = m_ConsumerConfig.ApplicationName;

            if (m_EsbConfig.ServiceConfig != null && m_EsbConfig.ServiceConfig.Count > 0)
            {
                //--根据QueueCenter的消费者配置文件中的ApplicationName找到和本机相关的配置文件
                List <EsbView_ServiceConfig> lstServcieConfig = m_EsbConfig.ServiceConfig.FindAll(x => {
                    return(!String.IsNullOrEmpty(x.QueueCenterUri) && appName.EndsWith(x.QueueCenterUri));
                });

                //--删除不应该由本机消费的队列并停用相关线程
                DeleteQueueThread(lstServcieConfig);

                //--添加本机应该消费的队列
                foreach (EsbView_ServiceConfig sc in lstServcieConfig)
                {
                    if (!m_QueueThreadDict.ContainsKey(sc.ServiceName))
                    {
                        RabbitMQClient rabbitMQ = new RabbitMQClient(m_ParamMQ[0], m_ParamMQ[2], m_ParamMQ[3], Int32.Parse(m_ParamMQ[1]));
                        QueueThread    qt       = new QueueThread(sc.ServiceName, rabbitMQ);
                        qt.Start();

                        m_QueueThreadDict[sc.ServiceName] = qt;
                    }
                }
            }
            else
            {
                //--删除不应该由本机消费的队列并停用相关线程
                DeleteQueueThread(null);
            }
        }
 public void Stop()
 {
     if (QueueThread.IsAlive)
     {
         QueueThread.Abort();
     }
 }
 /// <summary>
 /// 启动
 /// </summary>
 public void Start()
 {
     if (!QueueThread.IsAlive)
     {
         QueueThread.Start();
     }
 }
Example #4
0
 public RemoteControl(IRSensorLockWrapper irSensorWrapper, IRChannel channel)
 {
     this.irSensorWrapper = irSensorWrapper;
     this.channel         = channel;
     queue  = new QueueThread();
     thread = new Thread(Loop)
     {
         IsBackground = true
     };
     thread.Start();
 }
Example #5
0
        public void TestMethod1()
        {
            var qt = new QueueThread <int>((item) =>
            {
                System.Diagnostics.Debug.WriteLine(item);
                Thread.Sleep(1000);
            });

            qt.Start(8);
            for (int i = 0; i < 100; i++)
            {
                // Thread.Sleep(100);
                qt.Enqueue(i);
            }

            Thread.Sleep(40000);
            qt.WaitEnd();
        }
        public async Task <ThreadResponse> SendSingleRequestAsync()
        {
            ThreadModel model = new ThreadModel();
            string      name  = $"{Guid.NewGuid().ToString("N")}_{DateTime.Now.ToString("HHmmss")}";

            model.Name = name;

            //if cannot add request -> response bad request
            if (!QueueThread.AddThreadRequest(model))
            {
                ThreadResponse response = new ThreadResponse();
                response.Status  = 400;
                response.Message = "Bad Request";
                return(response);
            }

            model.Event.WaitOne();

            return(model.Response);
        }
        public void TestInitialize()
        {
            config = new QueueConfiguration("QueueName");

            shutdown = new Mock <IProvideShutdownSignal>();

            shutdown.SetupGet(s => s.ShouldShutdown)
            .Returns(() => loopCount > 0)
            .Callback(() => loopCount--);

            log = new Mock <ILog <QueueThread> >();

            dataAccess = new Mock <IBusDataAccess>();

            work = new Mock <IQueueWork>();

            work.Setup(p => p.DoWork())
            .Returns(Task.FromResult(true));

            thread = new QueueThread(shutdown.Object, dataAccess.Object, log.Object, work.Object, config);
        }
Example #8
0
        public JabberModel(JustTalk gui)
        {
            this.gui    = gui;
            packetQueue = new PacketQueue();
            queueThread = new QueueThread(packetQueue);
            queueThread.addPacketListener(new OpenStreamHandler(), "stream:stream");
            queueThread.addPacketListener(new CloseStreamHandler(this), "/stream:stream");
            queueThread.addPacketListener(new MessageHandler(this), "message");

            //Додадено од Милош/Васко
            queueThread.addPacketListener(new AuthHandler(this), "jabber:iq:auth");

            queueThread.addPacketListener(new IQHandler(this), "iq");
            //Крај додадено

            //marko
            queueThread.addPacketListener(new RosterHandler(this), "jabber:iq:roster");
            //kraj marko

            queueThread.addPacketListener(new PresenceHandler(this), "presence");
            queueThread.addPacketListener(new RegisterHandler(this), "jabber:iq:register");
            queueThread.setDaemon(true);
            queueThread.start();
        }
 public void Start()
 {
     var queueThread = new QueueThread(_monsterQueue, _monsterTargets);
     ThreadPool.QueueUserWorkItem(queueThread.ThreadStart);
 }
			public override void OnActivityCreated (Bundle savedInstanceState)
			{
				base.OnActivityCreated (savedInstanceState);
				queue =  new QueueThread(OnDequeue);
				brickController = BrickController.Instance;
				remoteSettings = RemoteSettings.Instance;
				circle =  (ImageView) this.View.FindViewById<ImageView> (Resource.Id.circle);
				circleAnimation = (AnimationDrawable) circle.Drawable;
				//grayCircle = Resources.GetDrawable(Resource.Drawable.aniGray);
				seekBar = (SeekBar)this.View.FindViewById<SeekBar> (Resource.Id.seekBar);
				seekBar.Max = 200;
				
				angleLabel = (TextView)this.View.FindViewById<TextView> (Resource.Id.angleLabel);
				speedLabel = (TextView)this.View.FindViewById<TextView> (Resource.Id.speedLabel);
				sliderLabel = (TextView)this.View.FindViewById<TextView> (Resource.Id.seekLabel);
				
				angleText = (TextView)this.View.FindViewById<TextView> (Resource.Id.angleTextView);
				speedText = (TextView)this.View.FindViewById<TextView> (Resource.Id.speedTextView);
				sliderText = (TextView)this.View.FindViewById<TextView> (Resource.Id.seekTextView);
				
				
				sensor1 = (Button)this.View.FindViewById<Button> (Resource.Id.sensor1Button);
				sensor2 = (Button)this.View.FindViewById<Button> (Resource.Id.sensor2Button);
				sensor3 = (Button)this.View.FindViewById<Button> (Resource.Id.sensor3Button);
				sensor4 = (Button)this.View.FindViewById<Button> (Resource.Id.sensor4Button);
				
				sensor1.Click += delegate {
					queue.AddToQueue(
						delegate {
							string s = brickController.NXT.Sensor1.ReadAsString();
							Activity.RunOnUiThread(delegate() {
								//this should not run in the gui thread
								if(remoteSettings.SensorValueToSpeech && TabActivity.Speech != null){
									TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
								}
							});
						},
						true,1 
					);
				};
				
				sensor2.Click += delegate {
					queue.AddToQueue(
						delegate {
							string s = brickController.NXT.Sensor2.ReadAsString();
							Activity.RunOnUiThread(delegate() {
								//this should not run in the gui thread
								if(remoteSettings.SensorValueToSpeech && TabActivity.Speech != null){
									TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
								}
							});
						},
						true,1
					);
				};
				
				sensor3.Click += delegate {
					queue.AddToQueue(
						delegate {
							string s = brickController.NXT.Sensor3.ReadAsString();
							Activity.RunOnUiThread(delegate() {
								//this should not run in the gui thread
								if(remoteSettings.SensorValueToSpeech && TabActivity.Speech != null){
									TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
								}
							});
						},
						true,1
					);
				};
				
				sensor4.Click += delegate {
					queue.AddToQueue(
						delegate {
							string s = brickController.NXT.Sensor4.ReadAsString();
							Activity.RunOnUiThread(delegate() {
								//this should not run in the gui thread
								if(remoteSettings.SensorValueToSpeech && TabActivity.Speech != null){
									TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
								}
							});
						},
						true,1
					);
				};
				
				seekBar.Progress = 100;
				sliderText.Text = progress.ToString();
				
				seekBar.StopTrackingTouch += delegate(object sender, SeekBar.StopTrackingTouchEventArgs e) {
					e.SeekBar.Progress = 100;
					progress = 0;
					Activity.RunOnUiThread (delegate() {
						sliderText.Text = progress.ToString();
					});
					if(remoteSettings.SendVehicleDataToMailbox){
							queue.AddToQueue(
								delegate {
									SendDataToMailbox();
								},
								true,2
							);
					}
					else{
						queue.AddToQueue(
								delegate {
									additionalMotor.Off();
								},
								true,2
							);
					}	
				};
				seekBar.ProgressChanged += delegate(object sender, SeekBar.ProgressChangedEventArgs e) {
					progress = e.Progress - 100;
					Activity.RunOnUiThread (delegate() {
						sliderText.Text = progress.ToString();
					});
					if(remoteSettings.SendVehicleDataToMailbox){
							queue.AddToQueue(
								delegate {
									SendDataToMailbox();
								},
								true,2
							);
					}
					else{
						queue.AddToQueue(
								delegate {
									additionalMotor.On((sbyte) (e.Progress -100));
								},
								true,2
							);
					}	

				};
				circle.Touch += delegate(object sender, View.TouchEventArgs e) {
					if(e.Event.Action == MotionEventActions.Up){
						angleText.Text = "0.0";
						speedText.Text = "0.0";
						angle = 0.0f;
						speed = 0.0f;
						wasRunningForward = true;
						if(remoteSettings.SendVehicleDataToMailbox){
							queue.AddToQueue(
								delegate {
									SendDataToMailbox();
								},
								true,2
							);
						}
						else{
							queue.AddToQueue(
								delegate {
									brickController.NXT.Vehicle.Off();
								},
								true,3
							);
						
						
						}
						circle.SetImageResource(Resource.Drawable.animation);
						circleAnimation = (AnimationDrawable) circle.Drawable;
						circleAnimation.Start();
					}
					if(e.Event.Action == MotionEventActions.Move || e.Event.Action == MotionEventActions.Down) {
						//movingOnCircle = true;
						if(diameter == 0){
							diameter = circle.Width / 2;
						}
						x = e.Event.GetX()-diameter;
						y = -(e.Event.GetY()-diameter);
						float outside = diameter*(float)1.06;
						if( !(x > outside || x < -outside || y > outside || y < -outside) ){
							if(x > 0.0){
								angle = Math.Atan(y/x);
								if( y < 0.0)
									angle = Math.Atan(y/x)+ 2*Math.PI;
							}
							else{
								angle = Math.Atan(y/x) + Math.PI;
							}
							angle = angle + remoteSettings.DegreeOffset;
							//convert radians to degree
							angle = (angle * (180.0 / Math.PI))%360;
							speed = (float)Math.Sqrt( x*x + y*y);
							speed = speed/diameter * 100;  
							if(speed > 100.0){
								speed = (float)100.0;
							}
						}
						else{
							speed = 0.0f;
							angle = 0.0f;
						}
						
						int intSpeed =(int) speed;
						Activity.RunOnUiThread (delegate() {
						
							if(intSpeed < 10){
								circle.SetImageResource(Resource.Drawable.ani0);
							}
							else if(intSpeed < 20){
								circle.SetImageResource(Resource.Drawable.ani1);
							
							}
							else if(intSpeed < 30){
								circle.SetImageResource(Resource.Drawable.ani2);
							
							}
							else if(intSpeed < 40){
								circle.SetImageResource(Resource.Drawable.ani3);
							
							}
							else if(intSpeed < 50){
								circle.SetImageResource(Resource.Drawable.ani4);
							
							}
							else if(intSpeed < 60){
								circle.SetImageResource(Resource.Drawable.ani5);
							
							}
							else if(intSpeed < 70){
								circle.SetImageResource(Resource.Drawable.ani6);
							
							}
							else if(intSpeed < 80){
							
								circle.SetImageResource(Resource.Drawable.ani7);
							}
							else if(intSpeed < 90){
								circle.SetImageResource(Resource.Drawable.ani8);
							
							}
							else{
								circle.SetImageResource(Resource.Drawable.ani9);
							
							}
							circleAnimation.Stop();
							//angleText.Text = "Angle: " + string.Format("{0,5:###.0}", angle).PadLeft(7);
							//speedText.Text = "Speed: " + string.Format("{0,5:###.0}", speed).PadLeft(7);
							angleText.Text = string.Format("{0,5:###.0}", angle);
							speedText.Text = string.Format("{0,5:###.0}", speed);

						});
						if(remoteSettings.SendVehicleDataToMailbox){
							queue.AddToQueue(
								delegate {
									SendDataToMailbox();
								},
								true,2
							);
						}
						else{
							queue.AddToQueue(
								delegate {
									if(angle >= 10.0f && angle < 80.0f){
										brickController.NXT.Vehicle.TurnLeftForward((sbyte)speed, (sbyte)(100.0f-(angle-10.0f)/70.0f * 100.0f));
										wasRunningForward = true;
										return;
									}
									if(angle >= 100.0f && angle < 170.0f){
										brickController.NXT.Vehicle.TurnLeftReverse((sbyte)speed, (sbyte)(100.0f-(170-(angle-10.0f))/70.0f * 100.0f));
										wasRunningForward = false;
										return;
									}
									if(angle >= 190.0f && angle < 260.0f){
										brickController.NXT.Vehicle.TurnRightReverse((sbyte)speed, (sbyte)(100.0f-((angle-10.0f)-190)/70.0f * 100.0f));
										wasRunningForward = false;
										return;
									}
									if(angle >= 280.0f && angle <= 350.0f){
										brickController.NXT.Vehicle.TurnRightForward((sbyte)speed, (sbyte)(100.0f-(350-(angle-10.0f))/70.0f * 100.0f));
										wasRunningForward = true;
										return;
									}
									if( (angle < 10.0f && angle >= 0.0f) || (angle > 350.0f) ){
										brickController.NXT.Vehicle.Forward((sbyte)speed);
										return;
									}
									if( angle >= 170.0f && angle < 190.0f){
										brickController.NXT.Vehicle.Backward((sbyte)speed);
										return;
									}
									if( angle >= 80.0f && angle < 100.0f){
										if(wasRunningForward){
											brickController.NXT.Vehicle.SpinLeft((sbyte)speed);
										}
										else{
											brickController.NXT.Vehicle.SpinRight((sbyte)speed);
										}
										return;
									}
									if( angle >= 260.0f && angle < 280.0f){
										if(wasRunningForward){
											brickController.NXT.Vehicle.SpinRight((sbyte)speed);
										}
										else{
											brickController.NXT.Vehicle.SpinLeft((sbyte)speed);
										}
										return;
									}
								},
								true,3
							);
						}
					}
				};
				circleAnimation.Start();
			}
        void createQueueThread() {
            QueueThread qThread = new QueueThread(packetQueue);

            //qThread.setDaemon(true); DO NOT set Daemon

            qThread.addPacketListener(new OpenStreamHandler(index), "stream:stream");
            qThread.addPacketListener(new CloseStreamHandler(index), "/stream:stream");
            qThread.addPacketListener(new MessageHandler(index), "message");
            qThread.addPacketListener(new PresenceHandler(index), "presence");
            qThread.addPacketListener(new RegisterHandler(index), "jabber:iq:register");
            qThread.addPacketListener(new AuthHandler(index), "jabber:iq:auth");
            qThread.addPacketListener(new RosterHandler(index), "jabber:iq:roster");
            qThread.addPacketListener(new SaveStateHandler(index), "savestate");
            qThread.start();
        }
        public override void OnActivityCreated(Bundle savedInstanceState)
        {
            base.OnActivityCreated(savedInstanceState);
            queue           = new QueueThread(OnDequeue);
            brickController = BrickController.Instance;
            remoteSettings  = RemoteSettings.Instance;
            circle          = (ImageView)this.View.FindViewById <ImageView> (Resource.Id.circle);
            circleAnimation = (AnimationDrawable)circle.Drawable;
            //grayCircle = Resources.GetDrawable(Resource.Drawable.aniGray);
            seekBar     = (SeekBar)this.View.FindViewById <SeekBar> (Resource.Id.seekBar);
            seekBar.Max = 200;

            angleLabel  = (TextView)this.View.FindViewById <TextView> (Resource.Id.angleLabel);
            speedLabel  = (TextView)this.View.FindViewById <TextView> (Resource.Id.speedLabel);
            sliderLabel = (TextView)this.View.FindViewById <TextView> (Resource.Id.seekLabel);

            angleText  = (TextView)this.View.FindViewById <TextView> (Resource.Id.angleTextView);
            speedText  = (TextView)this.View.FindViewById <TextView> (Resource.Id.speedTextView);
            sliderText = (TextView)this.View.FindViewById <TextView> (Resource.Id.seekTextView);


            sensor1 = (Button)this.View.FindViewById <Button> (Resource.Id.sensor1Button);
            sensor2 = (Button)this.View.FindViewById <Button> (Resource.Id.sensor2Button);
            sensor3 = (Button)this.View.FindViewById <Button> (Resource.Id.sensor3Button);
            sensor4 = (Button)this.View.FindViewById <Button> (Resource.Id.sensor4Button);

            sensor1.Click += delegate {
                queue.AddToQueue(
                    delegate {
                    string s = brickController.NXT.Sensor1.ReadAsString();
                    Activity.RunOnUiThread(delegate() {
                        //this should not run in the gui thread
                        if (remoteSettings.SensorValueToSpeech && TabActivity.Speech != null)
                        {
                            TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
                        }
                    });
                },
                    true, 1
                    );
            };

            sensor2.Click += delegate {
                queue.AddToQueue(
                    delegate {
                    string s = brickController.NXT.Sensor2.ReadAsString();
                    Activity.RunOnUiThread(delegate() {
                        //this should not run in the gui thread
                        if (remoteSettings.SensorValueToSpeech && TabActivity.Speech != null)
                        {
                            TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
                        }
                    });
                },
                    true, 1
                    );
            };

            sensor3.Click += delegate {
                queue.AddToQueue(
                    delegate {
                    string s = brickController.NXT.Sensor3.ReadAsString();
                    Activity.RunOnUiThread(delegate() {
                        //this should not run in the gui thread
                        if (remoteSettings.SensorValueToSpeech && TabActivity.Speech != null)
                        {
                            TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
                        }
                    });
                },
                    true, 1
                    );
            };

            sensor4.Click += delegate {
                queue.AddToQueue(
                    delegate {
                    string s = brickController.NXT.Sensor4.ReadAsString();
                    Activity.RunOnUiThread(delegate() {
                        //this should not run in the gui thread
                        if (remoteSettings.SensorValueToSpeech && TabActivity.Speech != null)
                        {
                            TabActivity.Speech.Speak(s, Android.Speech.Tts.QueueMode.Flush, null);
                        }
                    });
                },
                    true, 1
                    );
            };

            seekBar.Progress = 100;
            sliderText.Text  = progress.ToString();

            seekBar.StopTrackingTouch += delegate(object sender, SeekBar.StopTrackingTouchEventArgs e) {
                e.SeekBar.Progress = 100;
                progress           = 0;
                Activity.RunOnUiThread(delegate() {
                    sliderText.Text = progress.ToString();
                });
                if (remoteSettings.SendVehicleDataToMailbox)
                {
                    queue.AddToQueue(
                        delegate {
                        SendDataToMailbox();
                    },
                        true, 2
                        );
                }
                else
                {
                    queue.AddToQueue(
                        delegate {
                        additionalMotor.Off();
                    },
                        true, 2
                        );
                }
            };
            seekBar.ProgressChanged += delegate(object sender, SeekBar.ProgressChangedEventArgs e) {
                progress = e.Progress - 100;
                Activity.RunOnUiThread(delegate() {
                    sliderText.Text = progress.ToString();
                });
                if (remoteSettings.SendVehicleDataToMailbox)
                {
                    queue.AddToQueue(
                        delegate {
                        SendDataToMailbox();
                    },
                        true, 2
                        );
                }
                else
                {
                    queue.AddToQueue(
                        delegate {
                        additionalMotor.On((sbyte)(e.Progress - 100));
                    },
                        true, 2
                        );
                }
            };
            circle.Touch += delegate(object sender, View.TouchEventArgs e) {
                if (e.Event.Action == MotionEventActions.Up)
                {
                    angleText.Text    = "0.0";
                    speedText.Text    = "0.0";
                    angle             = 0.0f;
                    speed             = 0.0f;
                    wasRunningForward = true;
                    if (remoteSettings.SendVehicleDataToMailbox)
                    {
                        queue.AddToQueue(
                            delegate {
                            SendDataToMailbox();
                        },
                            true, 2
                            );
                    }
                    else
                    {
                        queue.AddToQueue(
                            delegate {
                            brickController.NXT.Vehicle.Off();
                        },
                            true, 3
                            );
                    }
                    circle.SetImageResource(Resource.Drawable.animation);
                    circleAnimation = (AnimationDrawable)circle.Drawable;
                    circleAnimation.Start();
                }
                if (e.Event.Action == MotionEventActions.Move || e.Event.Action == MotionEventActions.Down)
                {
                    //movingOnCircle = true;
                    if (diameter == 0)
                    {
                        diameter = circle.Width / 2;
                    }
                    x = e.Event.GetX() - diameter;
                    y = -(e.Event.GetY() - diameter);
                    float outside = diameter * (float)1.06;
                    if (!(x > outside || x < -outside || y > outside || y < -outside))
                    {
                        if (x > 0.0)
                        {
                            angle = Math.Atan(y / x);
                            if (y < 0.0)
                            {
                                angle = Math.Atan(y / x) + 2 * Math.PI;
                            }
                        }
                        else
                        {
                            angle = Math.Atan(y / x) + Math.PI;
                        }
                        angle = angle + remoteSettings.DegreeOffset;
                        //convert radians to degree
                        angle = (angle * (180.0 / Math.PI)) % 360;
                        speed = (float)Math.Sqrt(x * x + y * y);
                        speed = speed / diameter * 100;
                        if (speed > 100.0)
                        {
                            speed = (float)100.0;
                        }
                    }
                    else
                    {
                        speed = 0.0f;
                        angle = 0.0f;
                    }

                    int intSpeed = (int)speed;
                    Activity.RunOnUiThread(delegate() {
                        if (intSpeed < 10)
                        {
                            circle.SetImageResource(Resource.Drawable.ani0);
                        }
                        else if (intSpeed < 20)
                        {
                            circle.SetImageResource(Resource.Drawable.ani1);
                        }
                        else if (intSpeed < 30)
                        {
                            circle.SetImageResource(Resource.Drawable.ani2);
                        }
                        else if (intSpeed < 40)
                        {
                            circle.SetImageResource(Resource.Drawable.ani3);
                        }
                        else if (intSpeed < 50)
                        {
                            circle.SetImageResource(Resource.Drawable.ani4);
                        }
                        else if (intSpeed < 60)
                        {
                            circle.SetImageResource(Resource.Drawable.ani5);
                        }
                        else if (intSpeed < 70)
                        {
                            circle.SetImageResource(Resource.Drawable.ani6);
                        }
                        else if (intSpeed < 80)
                        {
                            circle.SetImageResource(Resource.Drawable.ani7);
                        }
                        else if (intSpeed < 90)
                        {
                            circle.SetImageResource(Resource.Drawable.ani8);
                        }
                        else
                        {
                            circle.SetImageResource(Resource.Drawable.ani9);
                        }
                        circleAnimation.Stop();
                        //angleText.Text = "Angle: " + string.Format("{0,5:###.0}", angle).PadLeft(7);
                        //speedText.Text = "Speed: " + string.Format("{0,5:###.0}", speed).PadLeft(7);
                        angleText.Text = string.Format("{0,5:###.0}", angle);
                        speedText.Text = string.Format("{0,5:###.0}", speed);
                    });
                    if (remoteSettings.SendVehicleDataToMailbox)
                    {
                        queue.AddToQueue(
                            delegate {
                            SendDataToMailbox();
                        },
                            true, 2
                            );
                    }
                    else
                    {
                        queue.AddToQueue(
                            delegate {
                            if (angle >= 10.0f && angle < 80.0f)
                            {
                                brickController.NXT.Vehicle.TurnLeftForward((sbyte)speed, (sbyte)(100.0f - (angle - 10.0f) / 70.0f * 100.0f));
                                wasRunningForward = true;
                                return;
                            }
                            if (angle >= 100.0f && angle < 170.0f)
                            {
                                brickController.NXT.Vehicle.TurnLeftReverse((sbyte)speed, (sbyte)(100.0f - (170 - (angle - 10.0f)) / 70.0f * 100.0f));
                                wasRunningForward = false;
                                return;
                            }
                            if (angle >= 190.0f && angle < 260.0f)
                            {
                                brickController.NXT.Vehicle.TurnRightReverse((sbyte)speed, (sbyte)(100.0f - ((angle - 10.0f) - 190) / 70.0f * 100.0f));
                                wasRunningForward = false;
                                return;
                            }
                            if (angle >= 280.0f && angle <= 350.0f)
                            {
                                brickController.NXT.Vehicle.TurnRightForward((sbyte)speed, (sbyte)(100.0f - (350 - (angle - 10.0f)) / 70.0f * 100.0f));
                                wasRunningForward = true;
                                return;
                            }
                            if ((angle < 10.0f && angle >= 0.0f) || (angle > 350.0f))
                            {
                                brickController.NXT.Vehicle.Forward((sbyte)speed);
                                return;
                            }
                            if (angle >= 170.0f && angle < 190.0f)
                            {
                                brickController.NXT.Vehicle.Backward((sbyte)speed);
                                return;
                            }
                            if (angle >= 80.0f && angle < 100.0f)
                            {
                                if (wasRunningForward)
                                {
                                    brickController.NXT.Vehicle.SpinLeft((sbyte)speed);
                                }
                                else
                                {
                                    brickController.NXT.Vehicle.SpinRight((sbyte)speed);
                                }
                                return;
                            }
                            if (angle >= 260.0f && angle < 280.0f)
                            {
                                if (wasRunningForward)
                                {
                                    brickController.NXT.Vehicle.SpinRight((sbyte)speed);
                                }
                                else
                                {
                                    brickController.NXT.Vehicle.SpinLeft((sbyte)speed);
                                }
                                return;
                            }
                        },
                            true, 3
                            );
                    }
                }
            };
            circleAnimation.Start();
        }