def __init__(self, myself_pi, logfn):
self._pl = {} # self._pl['Pirate'] =
self._vl = {} # self._vl['Vessel']['Pirate'] = PirateAboard
- # self._vl['Vessel']['#lastaboard']
+ # self._vl['Vessel']['#lastinfo']
self._v = None # self._v =
self._vessel = None # self._vl[self._vessel]
self._date = None
pa = PirateAboard(pirate, self._v, timestamp, event)
self._pl[pirate] = pa
self._v[pirate] = pa
- self._v['#lastaboard'] = timestamp
+ self._v['#lastinfo'] = timestamp
self.force_redisplay()
return pa
def expire_garbage(self, timestamp):
for (vn,v) in list(self._vl.iteritems()):
- la = v['#lastaboard']
+ la = v['#lastinfo']
if timestamp - la > opts.ship_reboard_clearout:
self._debug_line_disposition(timestamp,'',
'stale reset '+vn)
self._trash_vessel(v)
del self._vl[vn]
- def clear_vessel(self, timestamp):
- if self._v is not None:
- self._trash_vessel(self._v)
- self._v = {'#lastaboard': timestamp}
- self._vl[self._vessel] = self._v
+ def _create_vessel(self, vn, timestamp):
+ self._vl[vn] = v = { '#lastinfo': timestamp }
+ return v
+
+ def _update_vessel_lookup(self, vn, timestamp, dml):
+ v = self._vl.get(vn, None)
+ if v is None:
+ dml.append('new')
+ v = self._create_vessel(vn, timestamp)
+ elif timestamp - v['#lastinfo'] > opts.ship_reboard_clearout:
+ dml.append('stale')
+ self._trash_vessel(v)
+ v = self._create_vessel(vn, timestamp)
+ else:
+ dml.append('current')
+ return v
def _debug_line_disposition(self,timestamp,l,m):
debug('CLT %13s %-30s %s' % (timestamp,m,l))
m = rm('Going aboard the (\\S.*\\S)\\.\\.\\.$')
if m:
+ dm = ['boarding']
pn = self._myself.name
- self._vessel = m.group(1)
- dm = 'boarding'
-
- try: self._v = self._vl[self._vessel]
- except KeyError: self._v = None; dm += ' new'
-
- if self._v is not None: la = self._v['#lastaboard']
- else: la = 0; dm += ' ?la'
-
- if timestamp - la > opts.ship_reboard_clearout:
- self.clear_vessel(timestamp)
- dm += ' stale'
+ self._vessel = vn = m.group(1)
+ self._v = self._update_vessel_lookup(vn, timestamp, dm)
ob_x(pn, 'we boarded')
self.expire_garbage(timestamp)
- return d(dm)
+ return d(' '.join(dm))
if self._v is None:
return d('no vessel')
def _str_vessel(self, vn, v):
s = ' vessel %s\n' % vn
s += ' '*20 + "%-*s %13s\n" % (
- max_pirate_namelen, '#lastaboard',
- v['#lastaboard'])
+ max_pirate_namelen, '#lastinfo',
+ v['#lastinfo'])
for pn in sorted(v.keys()):
if pn.startswith('#'): continue
pa = v[pn]
if self._lbuf.endswith('\n'):
self.chatline(self._lbuf.rstrip())
self._lbuf = ''
+ if opts.debug >= 2:
+ debug(self.__str__())
if progress: progress.caughtup()
def changed(self):
progress.show_init(pirate, fetcher.ocean)
track = ChatLogTracker(myself, logfn)
- opts.debug -= 1
+ opts.debug -= 2
track.catchup(progress)
- opts.debug += 1
+ opts.debug += 2
track.force_redisplay()