private void setupHeader(final HeaderEncoder header, final int msgSeqNo, final int lastMsgSeqNumProcessed) { final UtcTimestampEncoder timestampEncoder = this.timestampEncoder; header.sendingTime(timestampEncoder.buffer(), timestampEncoder.update(clock.time())); header.msgSeqNum(msgSeqNo); if (lastMsgSeqNumProcessed != NO_LAST_MSG_SEQ_NUM_PROCESSED) { header.lastMsgSeqNumProcessed(lastMsgSeqNumProcessed); } }
GapFillEncoder() { sequenceResetEncoder.header().possDupFlag(true); sequenceResetEncoder.gapFillFlag(true); }
public void setupSession(final CompositeKey compositeKey, final HeaderEncoder headerEncoder) { final CompositeKeyImpl composite = (CompositeKeyImpl)compositeKey; headerEncoder.senderCompID(composite.localCompId); headerEncoder.senderSubID(composite.localSubID); headerEncoder.targetCompID(composite.remoteCompID); }
public void setupSession(final CompositeKey compositeKey, final HeaderEncoder headerEncoder) { requireNonNull(compositeKey, "compositeKey"); requireNonNull(headerEncoder, "headerEncoder"); final CompositeKeyImpl composite = (CompositeKeyImpl)compositeKey; headerEncoder.senderCompID(composite.localCompID); headerEncoder.targetCompID(composite.remoteCompID); }
private void initiateConnection() throws IOException { socket = SocketChannel.open(new InetSocketAddress("localhost", port)); final UtcTimestampEncoder timestamp = new UtcTimestampEncoder(); timestamp.encode(System.currentTimeMillis()); logon .heartBtInt(10) .encryptMethod(0) .header() .sendingTime(timestamp.buffer()) .msgSeqNum(1) .senderCompID(INITIATOR_ID) .targetCompID(ACCEPTOR_ID); final long result = logon.encode(buffer, 0); final int offset = Encoder.offset(result); final int length = Encoder.length(result); byteBuffer.position(offset); byteBuffer.limit(offset + length); assertEquals(length, socket.write(byteBuffer)); }
void setupHeader(final HeaderEncoder header, final int msgSeqNum, final boolean possDupFlag) { final long timestamp = System.currentTimeMillis(); final int timestampLength = sendingTimeEncoder.encode(timestamp); header .senderCompID(senderCompID) .targetCompID(targetCompID) .msgSeqNum(msgSeqNum) .sendingTime(sendingTimeEncoder.buffer(), timestampLength); if (possDupFlag) { final int origSendingTimeLength = origSendingTimeEncoder.encode(timestamp - 1000); header .possDupFlag(true) .origSendingTime(origSendingTimeEncoder.buffer(), origSendingTimeLength); } }
header.senderCompID(headerDecoder.senderCompID()); if (headerDecoder.hasSenderSubID()) header.senderSubID(headerDecoder.senderSubID()); header.senderLocationID(headerDecoder.senderLocationID()); header.targetCompID(headerDecoder.targetCompID()); if (headerDecoder.hasTargetSubID()) header.targetSubID(headerDecoder.targetSubID()); header.targetLocationID(headerDecoder.targetLocationID()); sequenceResetEncoder.header().msgSeqNum(heartbeatRangeSequenceNumberStart); sequenceResetEncoder.newSeqNo(heartbeatRangeSequenceNumberEnd); sequenceResetEncoder.header().sendingTime( timestampEncoder.buffer(), timestampEncoder.encode(System.currentTimeMillis()));
void setupMessage(final HeaderDecoder reqHeader) { final HeaderEncoder respHeader = sequenceResetEncoder.header(); respHeader.targetCompID(reqHeader.senderCompID(), reqHeader.senderCompIDLength()); respHeader.senderCompID(reqHeader.targetCompID(), reqHeader.targetCompIDLength()); if (reqHeader.hasSenderLocationID()) { respHeader.targetLocationID(reqHeader.senderLocationID(), reqHeader.senderLocationIDLength()); } if (reqHeader.hasSenderSubID()) { respHeader.targetSubID(reqHeader.senderSubID(), reqHeader.senderSubIDLength()); } if (reqHeader.hasTargetLocationID()) { respHeader.senderLocationID(reqHeader.targetLocationID(), reqHeader.targetLocationIDLength()); } if (reqHeader.hasTargetSubID()) { respHeader.senderSubID(reqHeader.targetSubID(), reqHeader.targetSubIDLength()); } }
private long logonWithSenderAndTarget(final String senderCompID, final String targetCompID) { logonEncoder.header() .sendingTime(new byte[] {0}) .senderCompID(senderCompID) .targetCompID(targetCompID); return logonEncoder.encryptMethod(0).heartBtInt(0).encode(asciiBuffer, 0); } }
/** * Send a message on this session. * * @param encoder the encoder of the message to be sent * @return the position in the stream that corresponds to the end of this message or a negative * number indicating an error status. * @throws IndexOutOfBoundsException if the encoded message is too large, if this happens consider * increasing {@link CommonConfiguration#sessionBufferSize(int)} */ public long send(final Encoder encoder) { validateCanSendMessage(); final int sentSeqNum = newSentSeqNum(); final HeaderEncoder header = (HeaderEncoder)encoder.header(); header .msgSeqNum(sentSeqNum) .sendingTime(timestampEncoder.buffer(), timestampEncoder.encode(time())); if (enableLastMsgSeqNumProcessed) { header.lastMsgSeqNumProcessed(lastMsgSeqNumProcessed); } if (!header.hasSenderCompID()) { sessionIdStrategy.setupSession(sessionKey, header); } final long result = encoder.encode(asciiBuffer, 0); final int length = Encoder.length(result); final int offset = Encoder.offset(result); return send(asciiBuffer, offset, length, sentSeqNum, encoder.messageType()); }
long encode(final int msgSeqNum, final int newSeqNo) { final HeaderEncoder respHeader = sequenceResetEncoder.header(); respHeader.sendingTime(timestampEncoder.buffer(), timestampEncoder.encode(System.currentTimeMillis())); respHeader.msgSeqNum(msgSeqNum); sequenceResetEncoder.newSeqNo(newSeqNo); return sequenceResetEncoder.encode(buffer, 0); }
protected void bufferContainsExampleMessage( final boolean hasPossDupFlag, final long sessionId, final int sequenceNumber, final int sequenceIndex, final String testReqId) { final ExampleMessageEncoder exampleMessage = new ExampleMessageEncoder(); final HeaderEncoder header = exampleMessage.header(); exampleMessage.testReqID(testReqId); if (hasPossDupFlag) { // NB: set to false to check that it gets flipped upon resend header.possDupFlag(false); header.origSendingTime(ORIGINAL_SENDING_TIME.getBytes(US_ASCII)); } bufferContainsMessage( sessionId, sequenceNumber, sequenceIndex, exampleMessage, header, ExampleMessageDecoder.MESSAGE_TYPE); }
protected long bufferHasResendRequest(final int endSeqNo, final String targetCompId) { final UtcTimestampEncoder timestampEncoder = new UtcTimestampEncoder(); timestampEncoder.encode(System.currentTimeMillis()); final ResendRequestEncoder resendRequest = new ResendRequestEncoder(); resendRequest .header() .sendingTime(timestampEncoder.buffer()) .msgSeqNum(1) .senderCompID(RESEND_SENDER) .targetCompID(targetCompId); return resendRequest .beginSeqNo(BEGIN_SEQ_NO) .endSeqNo(endSeqNo) .encode(new MutableAsciiBuffer(buffer), ENCODE_OFFSET); }
AbstractSessionTest() { doAnswer( (inv) -> { final HeaderEncoder encoder = (HeaderEncoder)inv.getArguments()[1]; encoder.senderCompID("senderCompID").targetCompID("targetCompID"); return null; }).when(idStrategy).setupSession(any(), any()); when(mockPublication.saveMessage( bufferCaptor.capture(), offsetCaptor.capture(), lengthCaptor.capture(), anyInt(), anyInt(), anyLong(), anyInt(), anyLong(), any(), anyInt())).thenReturn(POSITION); when(mockProxy.resendRequest(anyInt(), anyInt(), anyInt(), eq(SEQUENCE_INDEX), anyInt())).thenReturn(POSITION); }
private void bufferContainsMessage( final long sessionId, final int sequenceNumber, final int sequenceIndex, final Encoder exampleMessage, final HeaderEncoder header, final int messageType) { final UtcTimestampEncoder timestampEncoder = new UtcTimestampEncoder(); final int timestampLength = timestampEncoder.encode(ORIGINAL_SENDING_EPOCH_MS); MutableAsciiBuffer asciiBuffer = new MutableAsciiBuffer(new byte[BIG_BUFFER_LENGTH]); header .sendingTime(timestampEncoder.buffer(), timestampLength) .senderCompID(BUFFER_SENDER) .targetCompID(BUFFER_TARGET) .msgSeqNum(sequenceNumber); final long result = exampleMessage.encode(asciiBuffer, 0); logEntryLength = Encoder.length(result); final int encodedOffset = Encoder.offset(result); asciiBuffer = new MutableAsciiBuffer(asciiBuffer, encodedOffset, logEntryLength); bufferContainsMessage(sessionId, sequenceIndex, asciiBuffer, messageType); }
protected void bufferContainsTestRequest(final int sequenceNumber) { final TestRequestEncoder testRequestEncoder = new TestRequestEncoder(); final HeaderEncoder header = testRequestEncoder.header(); testRequestEncoder.testReqID("abc"); header.possDupFlag(false); bufferContainsMessage( SESSION_ID, sequenceNumber, SEQUENCE_INDEX, testRequestEncoder, header, TestRequestDecoder.MESSAGE_TYPE); }