- public void hookRequestCtx(final Xid xid, final RequestFutureContext requestFutureContext) {
- requests.put(xid, requestFutureContext);
+ public void hookRequestCtx(Xid xid, RequestContext requestFutureContext) {
+ // TODO Auto-generated method stub
+ requests.put(xid.getValue(), requestFutureContext);
+ }
+
+ @Override
+ public void processReply(OfHeader ofHeader) {
+ RequestContext requestContext = getRequests().get(ofHeader.getXid());
+ SettableFuture replyFuture = requestContext.getFuture();
+ getRequests().remove(ofHeader.getXid());
+ RpcResult<OfHeader> rpcResult;
+
+ if(ofHeader instanceof Error) {
+ Error error = (Error) ofHeader;
+ String message = "Operation on device failed";
+ rpcResult= RpcResultBuilder
+ .<OfHeader>failed()
+ .withError(RpcError.ErrorType.APPLICATION, message, new DeviceDataException(message, error))
+ .build();
+ } else {
+ rpcResult= RpcResultBuilder
+ .<OfHeader>success()
+ .withResult(ofHeader)
+ .build();
+ }
+
+ replyFuture.set(rpcResult);
+ try {
+ requestContext.close();
+ } catch (Exception e) {
+ LOG.error("Closing RequestContext failed: ", e);
+ }