/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.transport; import java.util.concurrent.atomic.AtomicInteger; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.FudgeMsgEnvelope; /** * Creates two FudgeConnection objects with the receiver and sender of each connected to the other. * Intended to help build test cases only. */ public class DirectFudgeConnection { private final FudgeContext _fudgeContext; private final AtomicInteger _messages1To2 = new AtomicInteger(); private final AtomicInteger _messages2To1 = new AtomicInteger(); private FudgeMessageReceiver _end1Receiver; private FudgeConnectionReceiver _end1Connection; private final FudgeMessageSender _end1Sender = new FudgeMessageSender() { @Override public FudgeContext getFudgeContext() { return _fudgeContext; } @Override public void send(FudgeMsg message) { _messages1To2.incrementAndGet(); if (_end2Receiver != null) { _end2Receiver.messageReceived(_fudgeContext, new FudgeMsgEnvelope(message)); } else { if (_end2Connection != null) { _end2Connection.connectionReceived(_fudgeContext, new FudgeMsgEnvelope(message), _end2); } } } }; private final FudgeConnection _end1 = new FudgeConnection() { @Override public FudgeMessageSender getFudgeMessageSender() { return _end1Sender; } @Override public void setFudgeMessageReceiver(FudgeMessageReceiver receiver) { _end1Receiver = receiver; } @Override public void setConnectionStateListener(final FudgeConnectionStateListener listener) { // no action; the direct connection can't change state } }; private FudgeMessageReceiver _end2Receiver; private FudgeConnectionReceiver _end2Connection; private final FudgeMessageSender _end2Sender = new FudgeMessageSender() { @Override public FudgeContext getFudgeContext() { return _fudgeContext; } @Override public void send(FudgeMsg message) { _messages2To1.incrementAndGet(); if (_end1Receiver != null) { _end1Receiver.messageReceived(_fudgeContext, new FudgeMsgEnvelope(message)); } else { if (_end1Connection != null) { _end1Connection.connectionReceived(_fudgeContext, new FudgeMsgEnvelope(message), _end1); } } } }; private final FudgeConnection _end2 = new FudgeConnection() { @Override public FudgeMessageSender getFudgeMessageSender() { return _end2Sender; } @Override public void setFudgeMessageReceiver(FudgeMessageReceiver receiver) { _end2Receiver = receiver; } @Override public void setConnectionStateListener(final FudgeConnectionStateListener listener) { // no action; the direct connection can't change state } }; public DirectFudgeConnection(final FudgeContext fudgeContext) { _fudgeContext = fudgeContext; } public FudgeConnection getEnd1() { return _end1; } public FudgeConnection getEnd2() { return _end2; } public void connectEnd1(final FudgeConnectionReceiver receiver) { _end1Connection = receiver; } public void connectEnd2(final FudgeConnectionReceiver receiver) { _end2Connection = receiver; } public int getAndResetMessages1To2() { return _messages1To2.getAndSet(0); } public int getAndResetMessages2To1() { return _messages2To1.getAndSet(0); } }