示例#1
0
    def set_persister(self, persister):
        self.persister = persister
        self.in_db, self.out_db = persister.getTodayPersister()
        #self.persister.report( self.inDb)
        #self.persister.report( self.outDb)
        p = SynchronousParser(self.fix)
        import time

        for db in (self.in_db, self.out_db):
            start = time.time()
            i = 0.0
            c = db.cursor()
            while True:
                v = c.next()
                if not v:
                    break
                msg, _, _ = p.feed(v[1])
                i += 1
            endTime = time.time()
            dur = endTime - start

            print "%s parsed %s messages in %s secs (%s/sec)" % (db, i, dur,
                                                                 i / dur)

        self.in_msg_seq_num = self.persister.getNextSeq(self.in_db)
        self.out_msg_seq_num = self.persister.getNextSeq(self.out_db)
        print "Setting sequence numbers %s %s" % (self.in_msg_seq_num,
                                                  self.out_msg_seq_num)
示例#2
0
    def __init__(self, session_manager, fix, config):
        self.session_manager = session_manager
        self.protocol = None
        self.fix = fix
        self.sender = config.sender
        self.target = config.target
        self.sender_compid = fix.SenderCompID(self.sender)
        self.target_compid = fix.TargetCompID(self.target)
        self.begin_string = fix.BeginString(fix.version)
        self.out_msg_seq_num = 1
        self.in_msg_seq_num = 1
        self.set_persister(
            BerkeleyPersister(config.persistRoot, self.sender, self.target))
        self.heartbeat_interval = config.heartbeatInterval
        # Why do we need an sp?
        self.sp = SynchronousParser(self.fix)
        self.last_by_type = {}
        self.state = None
        if config.app:
            self.set_app(config.app)
        else:
            self.set_app(FIXApplication(fix))

        self.on_integrity_exception = None
        self.last_integrity_exception = None
        self.want_to_be_logged_in = True
示例#3
0
    def __init__(self,
                 fix,
                 config,
                 initiatorProtocol=InitiatorFIXProtocol,
                 acceptorProtocol=AcceptorFIXProtocol):
        self.fix = fix
        self.config = config
        self.sessionLookup = {}

        self.initiatorProtocol = initiatorProtocol
        self.acceptorProtocol = acceptorProtocol

        self.beginString = self.fix.BeginString(self.fix.version)

        self.sessionByTuple = {}
        self.acceptorsByTuple = {}
        self.initiatorsByTuple = {}

        self.acceptorsByPort = defaultdict(lambda: {})
        self.initiatorFactories = []
        self.acceptorFactories = {}
        self.sessions = []

        self.perspective = None
        for s in config:
            idTuple = (s.sender, s.target)
            session = Session(self, fix, s)
            self.sessions.append(session)
            self.sessionByTuple[idTuple] = idTuple
            if s.connectionType == 'initiator':
                #session.host = s.host
                #session.port = s.port
                f = InitiatorFactory(self, session, s.host, s.port)
                session.factory = f
                self.initiatorFactories.append(f)
                self.initiatorsByTuple[idTuple] = session
            else:
                assert s.connectionType == 'acceptor', "Must be acceptor or initiator"
                self.acceptorsByPort[s.port][idTuple] = session
                self.acceptorsByTuple[idTuple] = session
            self.sessionByTuple[idTuple] = session

        for port, sessionMap in self.acceptorsByPort.items():
            af = AcceptorFactory(self, sessionMap)
            self.acceptorFactories[port] = af
        self.sp = SynchronousParser(self.fix)
示例#4
0
    def setUp(self):
        self.fix = parse_specification(self.version)
        self.fp = SynchronousParser(self.fix)

        self.sendConfig = SessionConfig(
            'initiator',
            0,
            'localhost',
            'INITIATOR',
            'ACCEPTOR',
            os.path.join(tempfile.mktemp(), "sender"),  # Will be tempfile
            60,
            None)
        self.ds = Session(None, self.fix, self.sendConfig)
        major, minor = self.version.split('.')[1:]
        self.numVersion = int(major) * 10 + int(minor)
        print "NV = %s" % self.numVersion
示例#5
0
 def recover(self):
     assert self.session is not None
     self.in_recovery = True
     sp = SynchronousParser(self.fix)
     c = self.session.persister.ledger.cursor()
     while True:
         d = c.next()
         if not d:
             break
         try:
             msg, _, _ = sp.parse(d[1])
             self.recovered_message(msg)
         except ParseException:
             msg = cPickle.loads(d[1])
             self.recovered_message(msg)
     c.close()
     self.on_recovery_done()
     self.in_recovery = False