コード例 #1
0
        // Launch this Critter.
        internal void Launch()
        {
            Reset();

            AttachNumberPlate();

            TargetMover spriteMover = new TargetMover();

            spriteMover.SpriteReachedTarget += (sender, spriteEvent) => Notify("REACHED_DESTINATION:" + spriteEvent.Sprite.Position.ToString());
            spriteMover.SpriteMoved         += MoveHandler;
            Mover = spriteMover;

            stopped = false;

            controllerThread = new Thread(() =>
            {
                controllerThreadRunning = true;
                while (controllerThreadRunning)
                {
                    controller.Responder = messageToBody => MessagesToBody.Enqueue(messageToBody);
                    controller.Logger    = logMessage => LogDebugging(logMessage);
                    while (MessagesFromBody.TryDequeue(out string messageFromBody))
                    {
                        try
                        {
                            controller.Receive(messageFromBody);
                        }
                        catch (Exception e)
                        {
                            Crashed(e);
                        }
                    }
                    Thread.Sleep(5);
                }
                // Clear message queues
                string ignore;
                while (MessagesFromBody.TryDequeue(out ignore))
                {
                    ;
                }
                while (MessagesToBody.TryDequeue(out ignore))
                {
                    ;
                }
            });
            controllerThread.IsBackground = true;
            controllerThread.Start();

            Log("launched");

            Notify("LAUNCH:" + Position.ToString());
        }
コード例 #2
0
ファイル: Critter.cs プロジェクト: jdouglas7122a/CritterWorld
 // Send message to controller
 private void Notify(string message)
 {
     LogDebugging("Message to controller: " + message);
     MessagesFromBody.Enqueue(message);
 }