- final RequestContext<SendEchoOutput> requestContext = getRequestContextStack().createRequestContext();
- final SettableFuture<RpcResult<SendEchoOutput>> sendEchoOutput = getRequestContextStack()
- .storeOrFail(requestContext);
- if (!sendEchoOutput.isDone()) {
- final DeviceContext deviceContext = getDeviceContext();
- final Xid xid = deviceContext.getNextXid();
- requestContext.setXid(xid);
-
- LOG.trace("Hooking xid {} to device context - precaution.", requestContext.getXid().getValue());
- deviceContext.hookRequestCtx(requestContext.getXid(), requestContext);
-
- final EchoInputBuilder echoInputOFJavaBuilder = new EchoInputBuilder();
- echoInputOFJavaBuilder.setVersion(getVersion());
- echoInputOFJavaBuilder.setXid(xid.getValue());
- echoInputOFJavaBuilder.setData(sendEchoInput.getData());
- final EchoInput echoInputOFJava = echoInputOFJavaBuilder.build();
-
- final Future<RpcResult<EchoOutput>> rpcEchoOutputOFJava = getPrimaryConnectionAdapter()
- .echo(echoInputOFJava);
- LOG.debug("Echo with xid {} was sent from controller", xid);
-
- ListenableFuture<RpcResult<EchoOutput>> listenableRpcEchoOutputOFJava = JdkFutureAdapters
- .listenInPoolThread(rpcEchoOutputOFJava);
-
- // callback on OF JAVA future
- SuccessCallback<EchoOutput, SendEchoOutput> successCallback = new SuccessCallback<EchoOutput, SendEchoOutput>(
- deviceContext, requestContext, listenableRpcEchoOutputOFJava) {
-
- @Override
- public RpcResult<SendEchoOutput> transform(RpcResult<EchoOutput> rpcResult) {
- EchoOutput echoOutputOFJava = rpcResult.getResult();
- SendEchoOutputBuilder sendEchoOutputBuilder = new SendEchoOutputBuilder();
- sendEchoOutputBuilder.setData(echoOutputOFJava.getData());
-
- LOG.debug("Echo with xid {} was received by controller.", rpcResult.getResult().getXid());
- return RpcResultBuilder.success(sendEchoOutputBuilder.build()).build();
- }
- };
- Futures.addCallback(listenableRpcEchoOutputOFJava, successCallback);
- } else {
- getMessageSpy().spyMessage(requestContext, MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMITTED_FAILURE);
- }
-
- // callback on request context future
- Futures.addCallback(sendEchoOutput, new FutureCallback<RpcResult<SendEchoOutput>>() {
-
- @Override
- public void onSuccess(RpcResult<SendEchoOutput> result) {
- }