Overview
For each changing of session state, FIXEdge creates a new internal FIX message (35=C | 49=fake | 56=fake ) and sends this message into business layer to notify about changes.
...
As the result of the script we get three tags: 56 - TargetCompID, 49 - SenderCompID, 147 - State.
prepareSessionState.js |
---|
status = getStringField(147);
var regexp = /.*\s+(\S+):(\S+)\s+(.*)/g;
match = regexp.exec(status);
if (match != null)
{
target = match[1];
sender = match[2];
state = match[3];
//print("[DEBUG] matched target = " + target + " sender = " + sender + " state = " + state);
setStringField(56, target);
setStringField(49, sender);
setStringField(147, state);
} |
ODBS history
Database configuration
...
BL_Config.xml |
---|
<?xml version="1.0" encoding="UTF-8"?> <!-- <!DOCTYPE FIXEdge SYSTEM "BusinessLayer.dtd"> --> <FIXEdge> <BusinessLayer> <!-- DB Table with Session Status --> <History Name="SessionStatus" StorageType="ODBC" TableName="FIXEdge.dbo.SessionStatus" ConnectionString="DSN=FIXEdgeDB;UID=user;PWD=password;" UseStoredProcForInsert="true" StoredProcName="insertSessionStatus" > <KeyField ColumnName="_SenderCompId">49</KeyField> <!-- SenderCompId --> <KeyField ColumnName="_TargetCompId">56</KeyField> <!-- TargetCompId --> <KeyField ColumnName="_OrigTime">42</KeyField> <!-- OrigTime --> <KeyField ColumnName="_SessionState">147</KeyField> <!-- Session's State --> </History> <!-- Save Events in 35=C messages notifing about session state to DB --> <Rule> <Source> <FixSession SenderCompID=".*" TargetCompID=".*" /> </Source> <Condition> <MatchField Field="35" Value="C"/> <MatchField Field="147" Value=".*:.*"/> <!-- Assume sender and target in 147 field is divided by ':'. The rest of the messages are redundant --> <Exclusion> <MatchMessage Value=".*147=.* AttemptToConnect.*"/> </Exclusion> </Condition> <Action> <Script Language="JavaScript" FileName="FIXEdge1/conf/prepareSessionState.js"/> <SaveToHistory Name="SessionStatus"/> </Action> </Rule> <DefaultRule> <Action> <DoNothing/> </Action> </DefaultRule> </BusinessLayer> </FIXEdge> |
File history
FIXEdge configuration
In order to save session state into the history file BL-Rules should be configured on the FIXEdge side:
- Rule for history definition - history name, history file parameters, fields definitions.
- Rule for saving to history - get message 35 = C, get session status using JavaScript, save to history (file).
BL_Config.xml |
---|
<?xml version="1.0" encoding="UTF-8"?> <!-- <!DOCTYPE FIXEdge SYSTEM "BusinessLayer.dtd"> --> <FIXEdge> <BusinessLayer> <!-- File history with Session Status --> <History Name="SessionStatus" StorageType="File" WorkingDirectory="FIXEdge1/conf/" StorageFileName="SessionStatus"> <KeyFields>49, 56, 42, 147</KeyFields> </History> <!-- Save Events in 35=C messages notifing about session state to the file --> <Rule> <Source> <FixSession SenderCompID=".*" TargetCompID=".*" /> </Source> <Condition> <MatchField Field="35" Value="C"/> <MatchField Field="147" Value=".*:.*"/> <!-- Assume sender and target in 147 field is divided by ':'. The rest of the messages are redundant --> <Exclusion> <MatchMessage Value=".*147=.* AttemptToConnect.*"/> </Exclusion> </Condition> <Action> <Script Language="JavaScript" FileName="FIXEdge1/conf/prepareSessionState.js"/> <SaveToHistory Name="SessionStatus"/> </Action> </Rule> <DefaultRule> <Action> <DoNothing/> </Action> </DefaultRule> </BusinessLayer> </FIXEdge> |