/* * Copyright (c) 2012 European Synchrotron Radiation Facility, * Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.gwt.rf.queue.client.core; import java.util.List; import uk.ac.diamond.gwt.rf.queue.client.core.QosRequestTransport.BatchedRequest; import com.google.web.bindery.requestfactory.shared.Receiver; import com.google.web.bindery.requestfactory.shared.RequestContext; import com.google.web.bindery.requestfactory.shared.RequestTransport; import com.google.web.bindery.requestfactory.shared.ServerFailure; /** * An eagerly serialised RequestContext. */ public class TransportEntry extends QosEntryWithState { private final String payload; private final RequestTransport.TransportReceiver receiver; // TODO 00 unit test can create lots of these, fire when feel like it public TransportEntry(RequestContext requestContext, Receiver recv) { QosRequestTransport transport = (QosRequestTransport) requestContext.getRequestFactory().getRequestTransport(); transport.startBatch(); transport.setNextReceiverForEntry(QosRequestTransport.CAPTURE); if (recv == null) { requestContext.fire(); } else { requestContext.fire(recv); } List<BatchedRequest> b = transport.flushBatch(); payload = b.get(0).payload; receiver = b.get(0).receiver; // close the RequestContext so can be re-used. try { receiver.onTransportFailure(new ServerFailure("GOO")); } catch (Throwable th) { } } TransportEntry(java.lang.String payload2, RequestTransport.TransportReceiver receiver2) { this.payload = payload2; this.receiver = receiver2; } @Override public void fire(QosRequestTransport transport) { setState(State.PENDING); transport.setNextReceiverForEntry(this); transport.send(payload, receiver); } }