/** * Non-blocking, not thread-safe * * @return Next Available remote control. Null if none is available. */ protected RemoteControlProxy findNextAvailableRemoteControl() { for (RemoteControlProxy remoteControl : remoteControls) { if (remoteControl.canHandleNewSession()) { return remoteControl; } } return null; }
/** * Not thread safe. * * @return All available remote controls. Never null. */ public List<RemoteControlProxy> availableRemoteControls() { LinkedList<RemoteControlProxy> availableremoteControls; availableremoteControls = new LinkedList<RemoteControlProxy>(); for (RemoteControlProxy remoteControl : remoteControls) { if (remoteControl.canHandleNewSession()) { availableremoteControls.add(remoteControl); } } return Arrays.asList( availableremoteControls.toArray(new RemoteControlProxy[availableremoteControls.size()])); }
/** * Not thread safe. * * @return All reserved remote controls. Never null. */ public List<RemoteControlProxy> reservedRemoteControls() { LinkedList<RemoteControlProxy> reservedRemoteControls; reservedRemoteControls = new LinkedList<RemoteControlProxy>(); for (RemoteControlProxy remoteControl : remoteControls) { if (remoteControl.concurrentSesssionCount() >= 1) { reservedRemoteControls.add(remoteControl); } } return Arrays.asList( reservedRemoteControls.toArray(new RemoteControlProxy[reservedRemoteControls.size()])); }
public RemoteControlProxy reserve() { final RemoteControlProxy remoteControl; try { remoteControlListLock.lock(); if (remoteControls.isEmpty()) { return null; } remoteControl = blockUntilARemoteControlIsAvailable(); remoteControl.registerNewSession(); LOGGER.info("Reserved remote control" + remoteControl); return remoteControl; } finally { remoteControlListLock.unlock(); } }
public void release(RemoteControlProxy remoteControl) { try { remoteControlListLock.lock(); remoteControl.unregisterSession(); LOGGER.info("Released remote control" + remoteControl); signalThatARemoteControlHasBeenMadeAvailable(); } finally { remoteControlListLock.unlock(); } }