private void processRequest(ServerSocketRemoteChannel channel, Object bareRequest) throws InterruptedException {
			if (bareRequest != null && bareRequest instanceof Transport) {
				Transport transport = (Transport) bareRequest;
				String requestId = transport.getId();
				Object requestObject = transport.getObject();

				if (requestObject instanceof Callable) {
					LOGGER.info("Scheduling request to be executed");
					//noinspection unchecked
					ezAsync.execute((Callable) requestObject, new RequestCallback(requestId, channel, thread));
					LOGGER.info("Request execution scheduled");
				} else {
					String errorMessage = "Unexpected object type. Expected " + Callable.class.getCanonicalName() + " but was " + (requestObject == null ? "null" : requestObject.getClass().getCanonicalName());
					LOGGER.error(errorMessage);

					try {
						channel.writeObject(Transport.wrapWithId(new Transport.TransportError(errorMessage), requestId));
					} catch (IOException e) {
						LOGGER.error("Failed to respond with error.");
					}
				}

			} else {
				LOGGER.error("Unexpected object type. Expected " + Transport.class.getCanonicalName() + " but was " + (bareRequest == null ? "null" : bareRequest.getClass().getCanonicalName()));
			}
		}