| | |
| | | import com.zy.core.model.Task; |
| | | |
| | | import java.util.Map; |
| | | import java.util.Queue; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.ConcurrentLinkedQueue; |
| | | import java.util.concurrent.LinkedBlockingQueue; |
| | |
| | | * 如果发现队列已满无法添加的话,会直接返回false。 |
| | | */ |
| | | public static boolean offer(SlaveType type, Integer id, Task task) { |
| | | Queue<Task> queue = resolveQueue(type, id); |
| | | if (queue == null) { |
| | | return false; |
| | | } |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).offer(task); |
| | | case DualCrn: |
| | | return DUAL_CRN_EXCHANGE.get(id).offer(task); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).offer(task); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).offer(task); |
| | | case Barcode: |
| | | return BARCODE_EXCHANGE.get(id).offer(task); |
| | | case Led: |
| | | return LED_EXCHANGE.get(id).offer(task); |
| | | case Scale: |
| | | return SCALE_EXCHANGE.get(id).offer(task); |
| | | return queue.offer(task); |
| | | default: |
| | | return false; |
| | | } |
| | |
| | | * 若队列为空,返回null。 |
| | | */ |
| | | public static Task poll(SlaveType type, Integer id) { |
| | | Queue<Task> queue = resolveQueue(type, id); |
| | | if (queue == null) { |
| | | return null; |
| | | } |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).poll(); |
| | | case DualCrn: |
| | | return DUAL_CRN_EXCHANGE.get(id).poll(); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).poll(); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).poll(); |
| | | case Barcode: |
| | | return BARCODE_EXCHANGE.get(id).poll(); |
| | | case Led: |
| | | return LED_EXCHANGE.get(id).poll(); |
| | | case Scale: |
| | | return SCALE_EXCHANGE.get(id).poll(); |
| | | return queue.poll(); |
| | | default: |
| | | return null; |
| | | } |
| | |
| | | * 取出元素,并不删除. |
| | | */ |
| | | public static Task peek(SlaveType type, Integer id) { |
| | | Queue<Task> queue = resolveQueue(type, id); |
| | | if (queue == null) { |
| | | return null; |
| | | } |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).peek(); |
| | | case DualCrn: |
| | | return DUAL_CRN_EXCHANGE.get(id).peek(); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).peek(); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).peek(); |
| | | case Barcode: |
| | | return BARCODE_EXCHANGE.get(id).peek(); |
| | | case Led: |
| | | return LED_EXCHANGE.get(id).peek(); |
| | | case Scale: |
| | | return SCALE_EXCHANGE.get(id).peek(); |
| | | return queue.peek(); |
| | | default: |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public static void clear(SlaveType type, Integer id){ |
| | | Queue<Task> queue = resolveQueue(type, id); |
| | | if (queue == null) { |
| | | return; |
| | | } |
| | | switch (type) { |
| | | case Crn: |
| | | CRN_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case DualCrn: |
| | | DUAL_CRN_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Rgv: |
| | | RGV_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Devp: |
| | | DEVP_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Barcode: |
| | | BARCODE_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Led: |
| | | LED_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Scale: |
| | | SCALE_EXCHANGE.get(id).clear(); |
| | | queue.clear(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | public static boolean hasExchange(SlaveType type, Integer id) { |
| | | return resolveQueue(type, id) != null; |
| | | } |
| | | |
| | | public static int size(SlaveType type, Integer id) { |
| | | Queue<Task> queue = resolveQueue(type, id); |
| | | return queue == null ? 0 : queue.size(); |
| | | } |
| | | |
| | | private static Queue<Task> resolveQueue(SlaveType type, Integer id) { |
| | | if (type == null || id == null) { |
| | | return null; |
| | | } |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id); |
| | | case DualCrn: |
| | | return DUAL_CRN_EXCHANGE.get(id); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id); |
| | | case Barcode: |
| | | return BARCODE_EXCHANGE.get(id); |
| | | case Led: |
| | | return LED_EXCHANGE.get(id); |
| | | case Scale: |
| | | return SCALE_EXCHANGE.get(id); |
| | | default: |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | } |