def request(self, json_payload, newpacket, info): from logs import lg from p2p import p2p_service # words = newpacket.Payload.split(' ') try: # mode = words[1][:10] mode = json_payload['action'] except: lg.exc() return p2p_service.SendFail(newpacket, "invalid json payload") if mode != 'join' and mode != 'write' and mode != 'read': lg.out( 8, "service_accountant.request DENIED, wrong mode provided : %s" % mode) return p2p_service.SendFail(newpacket, "invalid request") from coins import accountant_node if not accountant_node.A(): lg.out( 8, "service_accountant.request DENIED, accountant_node() state machine not exist" ) return p2p_service.SendFail(newpacket, "accountant_node service not started") # if accountant_node.A().state not in ['ACCOUNTANTS?', "READY", "VALID_COIN?", "WRITE_COIN!", ]: # lg.out(8, "service_accountant.request DENIED, accountant_node() state is : %s" % accountant_node.A().state) # return p2p_service.SendFail(request, "accountant_node service # currently unavailable") if mode == 'join': accountant_node.A('accountant-connected', newpacket.OwnerID) # if accountant_node.A().state == 'OFFLINE': # accountant_node.A('start') return p2p_service.SendAck(newpacket, 'accepted') return p2p_service.SendFail(newpacket, 'bad request')
def stop(self): from coins import coins_db from coins import accountant_node accountant_node.A().removeStateChangedCallback( self._on_accountant_node_switched) accountant_node.A('stop') accountant_node.A('shutdown') coins_db.shutdown() return True
def start(self): from coins import coins_db from coins import accountant_node from coins import accountants_finder coins_db.init() accountants_finder.A('init') accountant_node.A('init') accountant_node.A('start') accountant_node.A().addStateChangedCallback( self._on_accountant_node_switched) return True
def health_check(self): from coins import accountant_node return accountant_node.A().state in [ 'READY', 'READ_COINS', 'VALID_COIN?', 'WRITE_COIN!', ]