ChannelInfo activeChannelInfo() { if (_loginChannelList != null) { int numOfChannel = _loginChannelList.size(); for ( int idx = 0; idx < numOfChannel; ++idx ) { ReactorChannel.State state = _loginChannelList.get(idx).rsslReactorChannel().state(); if (state == ReactorChannel.State.READY || state == ReactorChannel.State.UP) return _loginChannelList.get(idx); } return numOfChannel > 0 ? _loginChannelList.get(numOfChannel-1) : null; } return null; }
private void handleTunnelStream() { for (ChannelInfo chnlInfo : chnlInfoList) { if (chnlInfo.loginRefresh == null || chnlInfo.serviceInfo == null || chnlInfo.reactorChannel == null || chnlInfo.reactorChannel.state() != ReactorChannel.State.READY) { continue; } if (tunnelStreamHandler != null) { tunnelStreamHandler.sendMsg(chnlInfo.reactorChannel); } } }
private void handleTunnelStream() { for (ChannelInfo chnlInfo : chnlInfoList) { if (chnlInfo.loginRefresh == null || chnlInfo.serviceInfo == null || chnlInfo.reactorChannel == null || chnlInfo.reactorChannel.state() != ReactorChannel.State.READY) { continue; } if (tunnelStreamHandler != null) { tunnelStreamHandler.sendMsg(chnlInfo.reactorChannel); } } }
private void read(ReactorChannel reactorChannel) { int ret; /* read until no more to read */ if (reactorChannel != null) { while ((ret = reactorChannel.dispatch(_dispatchOptions, _errorInfo)) > 0) {} if (ret == ReactorReturnCodes.FAILURE) { if (reactorChannel.state() != ReactorChannel.State.CLOSED && reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println("ReactorChannel dispatch failed: " + ret + "(" + _errorInfo.error().text() + ")"); closeReactor(); System.exit(ReactorReturnCodes.FAILURE); } } } }
private void sendItemUpdates(ChannelInfo chnlInfo) { if (chnlInfo.marketPriceHandler.sendItemUpdates(chnlInfo.reactorChannel, chnlInfo.cacheInfo, errorInfo)!= CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } if (chnlInfo.marketByOrderHandler.sendItemUpdates(chnlInfo.reactorChannel, chnlInfo.cacheInfo, errorInfo)!= CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } }
private void sendItemRefreshes(ChannelInfo chnlInfo) { if (chnlInfo.marketPriceHandler.sendItemRefreshes(chnlInfo.reactorChannel, chnlInfo.mpItemList, defaultServiceId, chnlInfo.cacheInfo, errorInfo)!= CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } if (chnlInfo.marketByOrderHandler.sendItemRefreshes(chnlInfo.reactorChannel, chnlInfo.mboItemList, defaultServiceId, chnlInfo.cacheInfo, errorInfo)!= CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } }
private void sendMPRequests(ChannelInfo chnlInfo) { if (chnlInfo.marketPriceHandler.sendItemRequests(chnlInfo.reactorChannel, chnlInfo.mpItemList, false, chnlInfo.loginRefresh, chnlInfo.serviceInfo, errorInfo) != CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } if (chnlInfo.mppsItemList.size() > 0 && !chnlInfo.mppsRequestSent) { if (chnlInfo.marketPriceHandler.sendItemRequests(chnlInfo.reactorChannel, chnlInfo.mppsItemList, true, chnlInfo.loginRefresh, chnlInfo.serviceInfo, errorInfo) != CodecReturnCodes.SUCCESS) { if (chnlInfo.reactorChannel.state() != ReactorChannel.State.CLOSED && chnlInfo.reactorChannel.state() != ReactorChannel.State.DOWN_RECONNECTING) { System.out.println(errorInfo.error().text()); uninitialize(); System.exit(ReactorReturnCodes.FAILURE); } } chnlInfo.mppsRequestSent = true; } }
private void processChannelDown(WorkerEvent event, ReactorErrorInfo errorInfo) { ReactorChannel reactorChannel = event.reactorChannel(); if (reactorChannel.state() != State.CLOSED) { if (reactorChannel.server() == null && !reactorChannel.recoveryAttemptLimitReached()) // client channel { // send CHANNEL_DOWN_RECONNECTING reactorChannel.state(State.DOWN_RECONNECTING); // send channel_down to user app via reactorChannelEventCallback. sendAndHandleChannelEventCallback("Reactor.processChannelDown", ReactorChannelEventTypes.CHANNEL_DOWN_RECONNECTING, reactorChannel, errorInfo); } else // server channel or no more retries { // send CHANNEL_DOWN since server channels are not recovered reactorChannel.state(State.DOWN); // send channel_down to user app via reactorChannelEventCallback. sendAndHandleChannelEventCallback("Reactor.processChannelDown", ReactorChannelEventTypes.CHANNEL_DOWN, reactorChannel, errorInfo); } } }
private void processChannelInit(ReactorChannel reactorChannel) { // add the reactorChannel to the init queue _initChannelQueue.add(reactorChannel); // register the channel with the selector try { if (reactorChannel.selectableChannel() != null) { reactorChannel.selectableChannel() .register(_selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ, reactorChannel); } } catch (ClosedChannelException e) { // the channel was already closed. Send this as a failure. if (reactorChannel.state() != State.CLOSED) reactorChannel.state(State.CLOSED); sendWorkerEvent(reactorChannel, WorkerEventTypes.CHANNEL_DOWN, ReactorReturnCodes.FAILURE, "Worker.processChannelInit", "Exception=" + e.getLocalizedMessage()); } }
int startWatchlistTimer(long expireTime, WlStream wlStream, ReactorErrorInfo errorInfo) { if (!_reactor.sendWorkerEvent(WorkerEventTypes.START_WATCHLIST_TIMER, _reactorChannel, expireTime)) { // _reactor.sendWorkerEvent() failed, send channel down _reactor.sendWorkerEvent(WorkerEventTypes.CHANNEL_DOWN, _reactorChannel); _reactorChannel.state(com.thomsonreuters.upa.valueadd.reactor.ReactorChannel.State.DOWN); _reactor.sendAndHandleChannelEventCallback("Watchlist.startWatchlistTimer", ReactorChannelEventTypes.CHANNEL_DOWN, _reactorChannel, errorInfo); return _reactor.populateErrorInfo(errorInfo, ReactorReturnCodes.FAILURE, "Watchlist.startWatchlistTimer", "_reactor.sendWorkerEvent() failed"); } _streamTimeoutInfoList.add(wlStream); return ReactorReturnCodes.SUCCESS; }
int disconnect(ReactorChannel reactorChannel, String location, ReactorErrorInfo errorInfo) { if (reactorChannel.server() == null && !reactorChannel.recoveryAttemptLimitReached()) // client channel { reactorChannel.state(State.DOWN_RECONNECTING); } else // server channel or no more retries { reactorChannel.state(State.DOWN); } if (reactorChannel.server() == null && !reactorChannel.recoveryAttemptLimitReached()) // client channel { // send CHANNEL_DOWN to user app via reactorChannelEventCallback. return sendAndHandleChannelEventCallback(location, ReactorChannelEventTypes.CHANNEL_DOWN_RECONNECTING, reactorChannel, errorInfo); } else // server channel or no more retries { // send CHANNEL_DOWN to user app via reactorChannelEventCallback. return sendAndHandleChannelEventCallback(location, ReactorChannelEventTypes.CHANNEL_DOWN, reactorChannel, errorInfo); } }
boolean isServiceUpAndAcceptingRequests(Service service) { return (_watchlist.reactorChannel().state() == ReactorChannel.State.UP || _watchlist.reactorChannel().state() == ReactorChannel.State.READY ) && service.checkHasState() && (!service.state().checkHasAcceptingRequests() || service.state().acceptingRequests() == 1) && service.state().serviceState() == 1; }
@Override public void channelInformation(ChannelInformation channelInformation) { if (_loginCallbackClient == null || _loginCallbackClient.loginChannelList().isEmpty()) { channelInformation.clear(); return; } try { super.userLock().lock(); ReactorChannel reactorChannel = null; // return first item in channel list with proper status for (ChannelInfo ci : _loginCallbackClient.loginChannelList()) if (ci.rsslReactorChannel().state() == ReactorChannel.State.READY || ci.rsslReactorChannel().state() == ReactorChannel.State.UP) reactorChannel = ci.rsslReactorChannel(); // if reactorChannel is not set, then just use the first element in _loginCallbackClient.loginChannelList() if (reactorChannel == null) reactorChannel = _loginCallbackClient.loginChannelList().get(0).rsslReactorChannel(); ((ChannelInformationImpl)channelInformation).set(reactorChannel); channelInformation.ipAddress("not available for OmmNiProvider connections"); } finally { super.userLock().unlock(); } }
private TransportBuffer getBuffer(int length, boolean packedBuffer) { TransportBuffer msgBuf = null; if (!_consPerfConfig.useReactor() && !_consPerfConfig.useWatchlist()) // use UPA Channel for sending and receiving { msgBuf = _channel.getBuffer(length, ProviderPerfConfig.totalBuffersPerPack() > 1, _error); } else // use UPA VA Reactor for sending and receiving { if (_reactorChannel != null && _reactorChannel.state() == ReactorChannel.State.READY) { msgBuf = _reactorChannel.getBuffer(length, ProviderPerfConfig.totalBuffersPerPack() > 1, _errorInfo); } } return msgBuf; }
private int sendFlushRequest(ReactorChannel reactorChannel, String location, ReactorErrorInfo errorInfo) { if (reactorChannel.flushRequested()) reactorChannel.flushAgain(true); /* Flush already in progress; wait till FLUSH_DONE is received, then request again. */ else { if (!sendWorkerEvent(WorkerEventTypes.FLUSH, reactorChannel)) { // sendWorkerEvent() failed, send channel down reactorChannel.state(State.DOWN); sendAndHandleChannelEventCallback(location, ReactorChannelEventTypes.CHANNEL_DOWN, reactorChannel, errorInfo); return populateErrorInfo(errorInfo, ReactorReturnCodes.FAILURE, location, "sendWorkerEvent() failed while requesting flush"); } reactorChannel.flushAgain(false); reactorChannel.flushRequested(true); } return ReactorReturnCodes.SUCCESS; }
private int closeStream(ReactorChannel chnl, int streamId, ReactorErrorInfo errorInfo) { if(chnl.state() == State.UP) { //get a buffer for the item close TransportBuffer msgBuf = chnl.getBuffer(TRANSPORT_BUFFER_SIZE_CLOSE, false, errorInfo); if (msgBuf == null) return ReactorReturnCodes.FAILURE; //encode item close closeMessage.clear(); closeMessage.streamId(streamId); encIter.clear(); encIter.setBufferAndRWFVersion(msgBuf, chnl.majorVersion(), chnl.minorVersion()); int ret = closeMessage.encode(encIter); if (ret != CodecReturnCodes.SUCCESS) { System.out.println("encodeMarketByOrderClose(): Failed <" + CodecReturnCodes.toString(ret) + ">"); } return chnl.submit(msgBuf, submitOptions, errorInfo); } return ReactorReturnCodes.SUCCESS; }
private int closeStream(ReactorChannel chnl, int streamId, ReactorErrorInfo errorInfo) { if(chnl.state() == State.UP) { //get a buffer for the item close TransportBuffer msgBuf = chnl.getBuffer(TRANSPORT_BUFFER_SIZE_CLOSE, false, errorInfo); if (msgBuf == null) return ReactorReturnCodes.FAILURE; //encode item close closeMessage.clear(); closeMessage.streamId(streamId); closeMessage.domainType(domainType); encIter.clear(); encIter.setBufferAndRWFVersion(msgBuf, chnl.majorVersion(), chnl.minorVersion()); int ret = closeMessage.encode(encIter); if (ret != CodecReturnCodes.SUCCESS) { System.out.println("encodeMarketPriceClose(): Failed <" + CodecReturnCodes.toString(ret) + ">"); } return chnl.submit(msgBuf, submitOptions, errorInfo); } return ReactorReturnCodes.SUCCESS; }
private int getNewBuffer(ProviderSession session, int length, Error error) { TransportBuffer msgBuf; if (!NIProvPerfConfig.useReactor() && !ProviderPerfConfig.useReactor()) // use UPA Channel for sending and receiving { msgBuf = session.clientChannelInfo().channel.getBuffer(length, ProviderPerfConfig.totalBuffersPerPack() > 1, error); } else // use UPA VA Reactor for sending and receiving { if (session.clientChannelInfo().reactorChannel.state() == ReactorChannel.State.READY) { msgBuf = session.clientChannelInfo().reactorChannel.getBuffer(length, ProviderPerfConfig.totalBuffersPerPack() > 1, _errorInfo); } else { msgBuf = null; } } if(msgBuf == null) { return TransportReturnCodes.NO_BUFFERS; } session.writingBuffer(msgBuf); return TransportReturnCodes.SUCCESS; }