public FixServer(int port) { _actorSystem = ActorSystem.Create("FIXServer"); // Some invented FX spot rates var prices = new Dictionary<string, double>() { { "USDGBP", 0.65575 }, { "USDJPY", 119.75 } }; var fixParser = new FixParser(); var tcpServerProps = Props.Create(() => new TcpServerActor(port, FixParser.ExtractFixMessages)); Func<IActorRefFactory, IActorRef> tcpServerCreator = (context) => context.ActorOf(tcpServerProps, "TcpServer"); var fixInterpreterProps = Props.Create(() => new FixInterpreterActor(fixParser)); Func<IActorRefFactory, IActorRef> fixInterpreterCreator = (context) => context.ActorOf(fixInterpreterProps, "FixInterpreter"); var fixServerProps = Props.Create(() => new Actors.FixServerActor(tcpServerCreator, fixInterpreterCreator, prices)); _fixServerActor = _actorSystem.ActorOf(fixServerProps, "FixServer"); }
public void ConvertFixMessageToFixObject_ReturnsLogoutObject_ForLogoutMessage() { string message = "8=FIXT1.1\u00019=28\u000135=5\u000149=Client\u000156=Bank\u000134=1\u000110=2\u0001"; BaseMessage result = new FixParser().ConvertFixMessageToFixObject(message); result.Should().BeOfType<LogoutMessage>(); result.As<LogoutMessage>().SenderCompID.Should().Be("Client"); result.As<LogoutMessage>().TargetCompID.Should().Be("Bank"); }
public void ConvertFixMessageToFixObject_ReturnsLogonMessageObject_ForLogonMessage() { string message = "8=FIXT1.1\u00019=35\u000135=A\u000149=Client\u000156=Bank\u000134=1\u0001108=30\u000110=70\u0001"; BaseMessage result = new FixParser().ConvertFixMessageToFixObject(message); result.Should().BeOfType<LogonMessage>(); result.As<LogonMessage>().HeartBeatInterval.TotalSeconds.Should().Be(30); result.As<LogonMessage>().MessageSequenceNumber.Should().Be(1); result.As<LogonMessage>().SenderCompID.Should().Be("Client"); result.As<LogonMessage>().TargetCompID.Should().Be("Bank"); }
public unsafe void TestScalar() { Span <byte> bytes = stackalloc byte[1024]; Span <int> tagStarts = stackalloc int[256]; Span <int> valueStarts = stackalloc int[256]; bytes.Clear(); var byteLen = Encoding.ASCII.GetBytes(msg.AsSpan(), bytes); Assert.That(byteLen, Is.EqualTo(msg.Length)); var numFields = FixParser.GetFieldBoundariesVectorized(bytes, byteLen, tagStarts, valueStarts); Assert.That(numFields, Is.EqualTo(8)); Assert.That(tagStarts.Slice(0, numFields).ToArray(), Is.EquivalentTo(new [] { 0, 10, 16, 21, 29, 39, 46, 67 })); Assert.That(valueStarts.Slice(0, numFields).ToArray(), Is.EquivalentTo(new [] { 2, 12, 19, 24, 32, 42, 49, 70 })); }
public void ConvertFixMessageToFixObject_ReturnsQuoteRequestObject_ForQuoteRequestMessage() { string message = "8=FIXT1.1\u00019=71\u000135=R\u000149=Client\u000156=Bank\u000134=7\u0001131=rfq712\u000155=USDJPY\u000110=171\u0001"; BaseMessage result = new FixParser().ConvertFixMessageToFixObject(message); result.Should().BeOfType<QuoteRequestMessage>(); result.As<QuoteRequestMessage>().SenderCompID.Should().Be("Client"); result.As<QuoteRequestMessage>().TargetCompID.Should().Be("Bank"); result.As<QuoteRequestMessage>().QuoteReqID.Should().Be("rfq712"); result.As<QuoteRequestMessage>().Symbol.Should().Be("USDJPY"); }
public void ConvertFixObjectToFixMessage_ReturnsCorrectString_ForTestRequestMessage() { var messageObject = new TestRequestMessage("Client", "Bank", 7, "Attempt1"); string result = new FixParser().ConvertFixObjectToFixMessage(messageObject); string expected = "8=FIXT1.1\u00019=33\u000135=1\u000149=Client\u000156=Bank\u000134=7\u0001112=\u000110=210\u0001"; result.Should().Be(expected); }
public void ConvertFixObjectToFixMessage_ReturnsCorrectString_ForQuoteMessage() { var messageObject = new QuoteMessage("Client", "Bank", 7, "rfq712", "q712", "USDJPY", 119.55); string result = new FixParser().ConvertFixObjectToFixMessage(messageObject); string expected = "8=FIXT1.1\u00019=71\u000135=S\u000149=Client\u000156=Bank\u000134=7\u0001131=rfq712\u0001117=q712\u000155=USDJPY\u0001133=119.5500\u000110=171\u0001"; result.Should().Be(expected); }
public void ConvertFixObjectToFixMessage_ReturnsCorrectString_ForLogoutMessage() { var messageObject = new LogoutMessage("Client", "Bank", 1); string result = new FixParser().ConvertFixObjectToFixMessage(messageObject); string expected = "8=FIXT1.1\u00019=28\u000135=5\u000149=Client\u000156=Bank\u000134=1\u000110=2\u0001"; result.Should().Be(expected); }
public void ConvertFixObjectToFixMessage_ReturnsCorrectString_ForLogonMessage() { var messageObject = new LogonMessage("Client", "Bank", 1, TimeSpan.FromSeconds(30)); string result = new FixParser().ConvertFixObjectToFixMessage(messageObject); string expected = "8=FIXT1.1\u00019=35\u000135=A\u000149=Client\u000156=Bank\u000134=1\u0001108=30\u000110=70\u0001"; result.Should().Be(expected); }