コード例 #1
0
class Server(da.DistProcess):

    def __init__(self, parent, initq, channel, props):
        super().__init__(parent, initq, channel, props)
        self._ServerReceivedEvent_0 = []
        self._events.extend([da.pat.EventPattern(da.pat.ReceivedEvent, '_ServerReceivedEvent_0', PatternExpr_2, sources=[PatternExpr_3], destinations=None, timestamps=None, record_history=True, handlers=[]), da.pat.EventPattern(da.pat.ReceivedEvent, '_ServerReceivedEvent_1', PatternExpr_5, sources=[PatternExpr_6], destinations=None, timestamps=None, record_history=None, handlers=[self._Server_handler_1]), da.pat.EventPattern(da.pat.ReceivedEvent, '_ServerReceivedEvent_2', PatternExpr_7, sources=[PatternExpr_8], destinations=None, timestamps=None, record_history=None, handlers=[self._Server_handler_2]), da.pat.EventPattern(da.pat.ReceivedEvent, '_ServerReceivedEvent_3', PatternExpr_9, sources=[PatternExpr_10], destinations=None, timestamps=None, record_history=None, handlers=[self._Server_handler_3])])

    def setup(self, servers, index, client, Nlength, master):
        self.client = client
        self.servers = servers
        self.index = index
        self.Nlength = Nlength
        self.master = master
        self.bankobj = Bank('wells', '123')
        self.startindex = 0
        self.head = self.servers[0]
        if (self.index == (self.Nlength - 1)):
            self.output(str(self.index))
            self.next = self.client
        else:
            self.next = self.servers[(self.index + 1)]
        self.endindex = (self.Nlength - 1)
        self.output(('serverindex' + str(self.index)))

    def main(self):
        _thread.start_new_thread(self.sendHealthCheck, ('Thread', 3, self.index, self.master))
        p = request = None

        def ExistentialOpExpr_0():
            nonlocal p, request
            for (_, (_, _, p), (_ConstantPattern15_, request)) in self._ServerReceivedEvent_0:
                if (_ConstantPattern15_ == 'request'):
                    if True:
                        return True
            return False
        _st_label_63 = 0
        while (_st_label_63 == 0):
            _st_label_63 += 1
            if ExistentialOpExpr_0():
                _st_label_63 += 1
            else:
                super()._label('_st_label_63', block=True)
                _st_label_63 -= 1
        _st_label_64 = 0
        while (_st_label_64 == 0):
            _st_label_64 += 1
            if False:
                _st_label_64 += 1
            else:
                super()._label('_st_label_64', block=True)
                _st_label_64 -= 1

    def sendHealthCheck(self, threadName, delay, index, master):
        self.output('inside sendHealthCheck')
        self.output((' %r.' % index))
        while True:
            time.sleep(delay)
            self._send(('HealthCheckmsg', index), master)

    def _Server_handler_1(self, tindex, p):
        self.output('updated tail server end')
        self.endindex = tindex
    _Server_handler_1._labels = None
    _Server_handler_1._notlabels = None

    def _Server_handler_2(self, tindex, p):
        self.output('updated next server end')
        self.next = self.servers[tindex]
    _Server_handler_2._labels = None
    _Server_handler_2._notlabels = None

    def _Server_handler_3(self, request, p):
        if (request.outcome in ['processed', 'inconsistent', 'insufficientfunds']):
            self.bankobj.set(request)
        elif (request.transaction == 'deposit'):
            request = self.bankobj.deposit(request)
        elif (request.transaction == 'withdraw'):
            request = self.bankobj.withdraw(request)
        elif (request.transaction == 'getbalance'):
            request = self.bankobj.getbalance(request)
        if (self.index < self.endindex):
            self._send(('request', request), self.next)
            self.output(('<%r,%s,%r>' % (request.requestid, request.outcome, request.balance)))
        else:
            self._send(('reply', request), self.client)
    _Server_handler_3._labels = None
    _Server_handler_3._notlabels = None