Exemplo n.º 1
0
        public static Task EnqueueActionPacket(ActionPacketQueueItem queueItem, QueuePriority priority)
        {
            lock ( _actionPacketQueueLock )
            {
                _actionPacketQueue.Enqueue(queueItem, priority);

                return(queueItem.WaitHandle.ToTask());
            }
        }
Exemplo n.º 2
0
        public static Task EnqueueDragDropGround(int serial, int amount, int x, int y, int z,
                                                 QueuePriority priority = QueuePriority.Low, bool delaySend = true)
        {
            lock ( _actionPacketQueueLock )
            {
                byte[] dragPacket = new DragItem(serial, amount).ToArray();
                byte[] dropItem   = new DropItem(serial, -1, x, y, z).ToArray();

                ActionPacketQueueItem dragQueueItem =
                    new ActionPacketQueueItem(dragPacket, dragPacket.Length, delaySend);
                _actionPacketQueue.Enqueue(dragQueueItem, priority);

                ActionPacketQueueItem dropQueueItem = new ActionPacketQueueItem(dropItem, dropItem.Length, delaySend);
                _actionPacketQueue.Enqueue(dropQueueItem, priority);

                return(new[] { dragQueueItem.WaitHandle, dropQueueItem.WaitHandle }.ToTask());
            }
        }
Exemplo n.º 3
0
        public static Task EnqueueActionPackets(IEnumerable <BasePacket> packets,
                                                QueuePriority priority = QueuePriority.Low, bool delaySend = true)
        {
            lock ( _actionPacketQueueLock )
            {
                List <EventWaitHandle> handles = new List <EventWaitHandle>();

                foreach (BasePacket packet in packets)
                {
                    byte[] data = packet.ToArray();

                    ActionPacketQueueItem queueItem = new ActionPacketQueueItem(data, data.Length, delaySend);
                    handles.Add(queueItem.WaitHandle);

                    _actionPacketQueue.Enqueue(queueItem, priority);
                }

                return(handles.ToTask());
            }
        }
Exemplo n.º 4
0
        private static void ProcessActionPacketQueue(ActionPacketQueueItem queueItem)
        {
            // Lock here so wait don't set the WaitHandle before we've called ToTask(?)
            lock ( _actionPacketQueueLock )
            {
                if (queueItem.DelaySend)
                {
                    while (Engine.LastActionPacket +
                           TimeSpan.FromMilliseconds(Options.CurrentOptions.ActionDelayMS) > DateTime.Now)
                    {
                        Thread.Sleep(1);
                    }
                }

                byte[] data   = queueItem.Packet;
                int    length = queueItem.Length;

                Engine.LastActionPacket = DateTime.Now;
                Engine.SendPacketToServer(data, length);

                queueItem.WaitHandle.Set();
            }
        }