Exemplo n.º 1
0
    def OnLSC(self, channelID, estimatedMemberCount, method, identityInfo,
              args):
        if not self.is_ready: return

        Space.OnLSC(self, channelID, estimatedMemberCount, method,
                    identityInfo, args)

        if isinstance(channelID,
                      tuple) and channelID[0][0] == 'solarsystemid2':

            if method == 'JoinChannel':
                safetyLevel = self.get_min_safety_level()

                if safetyLevel <= 0 and 'enemy_in_local' not in self.flags:
                    self.add_flag('enemy_in_local')

                    self.warn(
                        'Враги в локале, отправляем уведомления валить на ПОС',
                        self.role)

                    rec = {'type': 'notification', 'func': 'gopos'}
                    send_to_role('?{}'.format(pickle.dumps(rec)),
                                 ['miner', 'crub'])

            elif method == 'LeaveChannel':
                safetyLevel = self.get_min_safety_level()

                if safetyLevel > 0 and 'enemy_in_local' in self.flags:
                    self.flags.remove('enemy_in_local')

                    self.warn('В локале безопасно', self.role)
Exemplo n.º 2
0
def j_get_far(login, data):

    while True:
        rnd = str(random.randrange(1000000, 9999999))

        if rnd not in bot.questions:
            bot.questions[rnd] = 'wait_answer'

            break

    data['rnd'] = rnd

    bot.log.info('Отправляем запрос {} для {} = {}'.format(rnd, login, data),
                 status='DEBUG')

    send_to(login, '?{}'.format(pickle.dumps(data)))

    now = dt.now()

    while bot.questions[rnd] == 'wait_answer':
        blue.pyos.synchro.SleepWallclock(50)

        if dt.now() - now > datetime.timedelta(seconds=6):
            bot.log.warn('Не удалось получить ответ на запрос {} от {}'.format(
                rnd, login),
                         status='DEBUG')
            return 'error'

    answer = bot.questions[rnd]

    del bot.questions[rnd]

    return answer
Exemplo n.º 3
0
def j_far_message(login, datas):
    data = pickle.loads(datas)

    if data['type'] == 'answer':
        bot.log.info('Пришел ответ на запрос {} от {}, данные: {}'.format(
            data['rnd'], login, data['answer']),
                     status='DEBUG')

        bot.questions[data['rnd']] = data['answer']

    elif data['type'] == 'quest':
        bot.log.info('Пришел запрос {} от {}, данные: {}'.format(
            data['rnd'], login, data),
                     status='DEBUG')

        if bot.macros and bot.macros.is_ready:
            bot.macros.j_quest(login, data)

        else:
            rec = {'rnd': data['rnd'], 'answer': 'error'}

            send_to(login, '?{}'.format(pickle.dumps(rec)))

    elif data['type'] == 'notification':
        if bot.macros and bot.macros.is_ready:
            bot.log.info('Пришло уведомление от {}, данные: {}'.format(
                login, data),
                         status='DEBUG')

            bot.macros.j_notification(login, data)
        else:
            bot.log.info(
                'Макрос не загружен, уведомление от {} будет проигнорировано, данные: {}'
                .format(login, data))

    else:
        bot.log.warn('Несовместимый формат сообщения: {}'.format(data),
                     status='DEBUG')
Exemplo n.º 4
0
def j_send_far(login, data):
    send_to(login, '?{}'.format(pickle.dumps(data)))