package com.sequenceiq.samples.server; import com.sequenceiq.samples.client.Client; import com.sequenceiq.samples.transfer.StatusRequest; import com.sequenceiq.samples.transfer.StatusResponse; import java.util.HashMap; import java.util.Map; import java.util.Queue; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.atomic.AtomicLong; public class Server extends Thread { private volatile boolean stopRequested = false; private volatile boolean stop = false; private AtomicLong id = new AtomicLong(0); private Map<Long, Client> clients = new HashMap<>(); private Queue<StatusRequest> statusRequests = new LinkedBlockingDeque<>(); public Server() { start(); } @Override public void run() { while (!stop) { try { Thread.sleep(4000); StatusRequest statusRequest = statusRequests.poll(); if (statusRequest != null) { clients.get(statusRequest.getClientId()).receive( new StatusResponse(statusRequest.getRequestId(), "OK")); } if (stopRequested && statusRequests.size() == 0) { stop = true; } } catch (InterruptedException e) { } } } public void shutdown() { stopRequested = true; } public long register(Client client) { long id = this.id.getAndIncrement(); clients.put(id, client); return id; } public void status(StatusRequest request) { statusRequests.add(request); } }