示例#1
0
 static TaskGraph()
 {
     instance     = new TaskGraph();
     dispatcher   = new Channel <Task>(new RoundRobinDispatcher());
     pendingTasks = new QueueBuffer <Task>(64);
     comparer     = new TaskPinComparer();
 }
示例#2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="port">端口</param>
        /// <param name="remote">远程ip地址</param>
        /// <param name="subThread">是否运行子线程派发消息</param>
        /// <param name="type">封包类型</param>
        /// <param name="es">封包缓存大小</param>
        public UdpSocket(int port, IPEndPoint remote, bool subThread = true, PackType type = PackType.Total, int es = 262144)
        {
            endPoint = remote;
            //Links = new Linker[thread * 1024];
            IPEndPoint ip = new IPEndPoint(IPAddress.Any, port);

            soc = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //new UdpClient(_port);//new IPEndPoint(IPAddress.Parse(ip),
            soc.Bind(ip);
            soc.ReceiveTimeout = 1000;

            if (type != PackType.None)
            {
                Packaging     = true;
                envelope      = new TcpEnvelope(es);
                envelope.type = type;
            }
            running = true;
            auto    = subThread;
            if (thread == null)
            {
                thread = new Thread(Run);
                thread.Start();
            }
            queue = new QueueBuffer <SocData>();
        }
示例#3
0
 public static void SetupClient()
 {
     Client.Start(SERVER_IP, 1025, 1026, "MainRover");
     DrivePackets = new QueueBuffer();
     StopPackets  = new QueueBuffer();
     ModePackets  = new QueueBuffer();
     PathPackets  = new QueueBuffer();
     Parse.SetParseHandler(0x80, (Packet) => StopPackets.Enqueue(Packet, 0));
     Parse.SetParseHandler(0x99, (Packet) => ModePackets.Enqueue(Packet, 0));
     for (byte i = 0x8E; i <= 0x94; i++)
     {
         Parse.SetParseHandler(i, (Packet) => DrivePackets.Enqueue(Packet, 0));
     }
     Parse.SetParseHandler(0x98, (Packet) => DrivePackets.Enqueue(Packet, 0));
     for (byte i = 0x9A; i <= 0xA1; i++)
     {
         Parse.SetParseHandler(i, (Packet) => DrivePackets.Enqueue(Packet, 0));
     }
     for (byte i = 0x95; i <= 0x97; i++)
     {
         Parse.SetParseHandler(i, (Packet) => PathPackets.Enqueue(Packet, 0));
     }
     PathSpeed = 0;
     PathAngle = 0;
 }
示例#4
0
 public BandwidthControlBuffer ConstructBandwidthController(int[] badwidhtAllocation = null)
 {
     QueueBuffer[] sub = new QueueBuffer[3];
     sub[0] = new QueueBuffer();
     sub[1] = new QueueBuffer();
     sub[2] = new QueueBuffer();
     return(new BandwidthControlBuffer(sub, badwidhtAllocation, 512));
 }
示例#5
0
 public PriorityBuffer ConstructPriorityController()
 {
     QueueBuffer[] sub = new QueueBuffer[3];
     sub[0] = new QueueBuffer();
     sub[1] = new QueueBuffer();
     sub[2] = new QueueBuffer();
     return(new PriorityBuffer(sub));
 }
示例#6
0
        public static void ProcessInstructions()
        {
            if (!StopPackets.IsEmpty())
            {
                StopPackets = new QueueBuffer();
                // Stop the Rover
            }
            else if (!ModePackets.IsEmpty())
            {
                ProcessModePackets();
            }
            else
            {
                switch (CurDriveMode)
                {   // TODO For each case statement, clear undeeded queue buffers
                case DriveMode.BaseDrive:
                    ProcessBasePackets();
                    PathPackets = new QueueBuffer();
                    break;

                case DriveMode.toGPS:
                    ProcessPathPackets();
                    DrivePackets = new QueueBuffer();
                    break;

                case DriveMode.findTennisBall:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    break;

                case DriveMode.toTennisBall:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    break;

                case DriveMode.destination:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    //Spinning Motor
                    float t = 0.1f;
                    while (t < .9f)
                    {
                        OutA.SetOutput(t);
                        t += 0.0001f;
                    }
                    while (t > .1f)
                    {
                        OutA.SetOutput(t);
                        t -= 0.0001f;
                    }
                    OutA.Dispose();
                    break;
                }
            }
        }
示例#7
0
 public virtual void Dispose()
 {
     envelope.Dispose();
     envelope = null;
     if (metaData != null)
     {
         metaData.Clear();
     }
     metaData = null;
     kcp      = null;
 }
示例#8
0
        public void TestLeakyBucketOrder()
        {
            QueueBuffer controller = new QueueBuffer();

            controller.Enqueue(NewPacket(1, 0));
            controller.Enqueue(NewPacket(2, 0));
            controller.Enqueue(NewPacket(3, 0));
            AssertPacket(controller.Dequeue(), 1, 0);
            AssertPacket(controller.Dequeue(), 2, 0);
            AssertPacket(controller.Dequeue(), 3, 0);
            Assert.AreEqual(controller.Dequeue(), null);
        }
示例#9
0
 public UserQueue(QueueBufferFor who)
     : base()
 {
     //this is a queue for of user ids, so the value COMMENT, which will make the queue store status ids, is not allowed, default value USER_INFO will be used.
     if (who == QueueBufferFor.COMMENT)
     {
         lstWaitingIDInDB = new QueueBuffer(QueueBufferFor.USER_INFO);
     }
     else
     {
         lstWaitingIDInDB = new QueueBuffer(who);
     }
 }
示例#10
0
        public void TestLeakyBucketEmpty()
        {
            QueueBuffer controller = new QueueBuffer();

            Assert.AreEqual(controller.Peek(), null);
            Assert.AreEqual(controller.Dequeue(), null);

            controller.Enqueue(NewPacket(10, 0));
            AssertPacket(controller.Peek(), 10, 0);
            AssertPacket(controller.Dequeue(), 10, 0);
            Assert.AreEqual(controller.Peek(), null);
            Assert.AreEqual(controller.Dequeue(), null);
        }
示例#11
0
        public void TestLeakyBucketCapacity()
        {
            QueueBuffer controller = new QueueBuffer();
            int         capacity   = 200000;

            for (int i = 0; i < capacity; i++)
            {
                controller.Enqueue(NewPacket(10, 0));
            }
            controller.Peek();
            for (int i = 0; i < capacity; i++)
            {
                controller.Dequeue();
            }
        }
示例#12
0
        private static void Main(string[] args)
        {
            // TAKE ONE
            var buffer = new CircularBuffer <double>();
            //ProcessInput(buffer);

            // TAKE TWO
            // Some scenarios where extension of buffer is needed
            // Avoid coding agains a concrete class, instead code against an interface
            var bufferInterface = new CircularBufferByInterface <double>();

            ProcessBufferByInterface(bufferInterface);

            // And I can use different Buffer without changing client code
            var queueBuffer = new QueueBuffer <double>();

            ProcessBufferByInterface(queueBuffer);

            // TAKE THREE
            // Enumerating a buffer - IEnumerable has been implemented
            // Now i'm able to use foreach
            foreach (var item in queueBuffer)
            {
                Console.WriteLine(item);
            }

            // TAKE FOUR - ADDING <TOutput> METHOD
            // TOutput will return different TOutput type than Buffer<T> type
            var asInts = queueBuffer.AsEnumerableOf <int>();

            ProcessInputByInterface(queueBuffer);
            foreach (var item in queueBuffer)
            {
                Console.WriteLine(item);
            }

            // TAKE FIVE - ADDING EXTENSION METHOD that returns <TOutput)
            var asInts2 = queueBuffer.AsEnumerableOfExtension <double, int>();

            ProcessInputByInterface(queueBuffer);

            // TAKE SIX - ADDING ANOTHER EXTENSION (VOID) method
            queueBuffer.Dump();
        }
示例#13
0
        public static void ProcessInstructions()
        {
            if (!StopPackets.IsEmpty())
            {
                StopPackets = new QueueBuffer();
                // Stop the Rover
            }
            else if (!ModePackets.IsEmpty())
            {
                ProcessModePackets();
            }
            else
            {
                switch (CurDriveMode)
                {   // TODO For each case statement, clear undeeded queue buffers
                case DriveMode.BaseDrive:
                    ProcessBasePackets();
                    PathPackets = new QueueBuffer();
                    break;

                case DriveMode.toGPS:
                    ProcessPathPackets();
                    DrivePackets = new QueueBuffer();
                    break;

                case DriveMode.findTennisBall:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    break;

                case DriveMode.toTennisBall:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    break;

                case DriveMode.destination:
                    DrivePackets = new QueueBuffer();
                    PathPackets  = new QueueBuffer();
                    break;
                }
            }
        }
        public ThreadMission(string tag)
        {
            Tag         = tag;
            SubMission  = new QueueBuffer <Mission>();
            MainMission = new QueueBuffer <Mission>();
#if UNITY_WSA
            thread = System.Threading.Tasks.Task.Run(Run);
            are    = new AutoResetEvent(false);
            run    = true;
            thread.Start();
            Id = thread.Id;
#else
            thread = new Thread(Run);
            are    = new AutoResetEvent(false);
            run    = true;
            thread.Start();
            Id = thread.ManagedThreadId;
#endif

            threads.Add(this);
        }
示例#15
0
 public TreeView()
 {
     swap  = new SwapBuffer <TreeViewItem, TreeViewNode>(512);
     queue = new QueueBuffer <TreeViewItem>(256);
 }
 public KcpSocket()
 {
     datas = new QueueBuffer <KcpData>();
 }
示例#17
0
 protected virtual void Start()
 {
     Font.textureRebuilt += FontTextureRebuilt;
     Main = new QueueBuffer <TempBuffer>();
     Sub  = new QueueBuffer <TempBuffer>();
 }
示例#18
0
        public void TestLeakyBucketPriority()
        {
            QueueBuffer controller = new QueueBuffer();

            controller.Enqueue(NewPacket(1, 0), 1);
        }
示例#19
0
        static void Main(string[] args)
        {
            // DELEGATE => pointer to an action/method()

            // ACTION<T>
            // Action => returns nothing, takes 0-16 parameters (in this case a double object)
            // TAKE ONE
            // Pointer to a method ConsoleWrite
            Action <double> print = ConsoleWrite;

            print(2.2);

            // Extension Method taking in Action<T> => sending a pointer to ConsoleWrite Method
            var queueBuffer = new QueueBuffer <double>();

            queueBuffer.DumpActionDelegate <double>(print);

            // TAKE TWO - ANONYMOUS DELEGATE METHOD
            // Where implementation is anonymous and not an actual Method()
            Action <double> printAnon = delegate(double data)
            { Console.Write(data); };

            var queueBuffer2 = new QueueBuffer <double>();

            queueBuffer2.DumpActionDelegate <double>(printAnon);

            // TAKE THREE - LAMBDA EXPRESSIONS
            var queueBuffer3 = new QueueBuffer <double>();

            queueBuffer3.DumpActionDelegate(d => ConsoleWrite(d));

            // Empty Lambda
            Action doNothing = () => { };


            // FUNC<T, K>
            // Func => returns one param, takes 0-16 parameters (in this case a double object)
            // Last param is the return type
            // ie. Func<double, string> takes in double, returns a string
            // TAKE ONE
            // Squere a number
            Func <double, double> square = d => d * d;

            // Add two doubles, return a double
            Func <double, double, double> add = (x, y) => x + y;

            // TAKE FOUR
            // CONVERTER
            // Takes in one type and returns another
            Converter <double, string> converter = d => d.ToString();

            // Using Converter
            var queueBufferConverter = new QueueBuffer <double>();

            Converter <double, DateTime> converterDate = d => new DateTime(2010, 1, 1).AddDays(d);

            queueBufferConverter.AsEnumerableOfExtensionUsingConverter <double, DateTime>(converterDate);

            // TAKE FIVE
            // Adding event handler
            var queueWithEvent = new QueueBuffer <double>();

            // Subscribe to event and specify the method that will fire when event occurs
            queueWithEvent.ItemDiscarded += QueueWithEventOnItemDiscarded;
        }
示例#20
0
 public StatusQueue()
     : base()
 {
     lstWaitingIDInDB = new QueueBuffer(QueueBufferFor.COMMENT);
 }