Example #1
0
    def get_message(self, from_addr, num=1, remove=False):
        """
        送信元アドレス指定で受信メッセージを取り出す。デフォルトでは1通のみ
        取り出す。またデフォルトでは取り出してもメッセージはキューに残る

        封書の場合は取り出した時点で開封通知が相手に届く

        :param from_addr: 取得したいメッセージの送信元アドレス
        :param num: 何通取り出すか。指定数未満のメッセージしない場合でもある限り取得する
        :param remove: 取得したメッセージをキューから削除するか(default=false)
        :return: IpmsgMessageインスタンスのリスト
        """
        matched_received_list = [
            msg for msg in self.received_que if msg.addr == from_addr
        ][0:num]

        for msg in matched_received_list:
            # 削除処理
            if remove:
                logger.debug("Remove rcv:[%s:%s]" % (msg.packet_no, msg.addr))
                self.received_que.remove(msg)

            # 封書の場合は開封パケットを送る
            # remove=Falseだと何回か開封パケットが飛ぶがエラーにはならないようなのでよしとする
            if msg.is_secretopt():
                ip_msg = IpmsgMessage(msg.addr, msg.port, msg.packet_no,
                                      self._get_packet_no(), self.user_name)
                ip_msg.set_flag(c.IPMSG_READMSG)
                self._send(ip_msg)

        return matched_received_list
Example #2
0
    def get_message(self, from_addr, num=1, remove=False):
        """
        送信元アドレス指定で受信メッセージを取り出す。デフォルトでは1通のみ
        取り出す。またデフォルトでは取り出してもメッセージはキューに残る

        封書の場合は取り出した時点で開封通知が相手に届く

        :param from_addr: 取得したいメッセージの送信元アドレス
        :param num: 何通取り出すか。指定数未満のメッセージしない場合でもある限り取得する
        :param remove: 取得したメッセージをキューから削除するか(default=false)
        :return: IpmsgMessageインスタンスのリスト
        """
        matched_received_list = [msg for msg in self.received_que if msg.addr == from_addr][0:num]

        for msg in matched_received_list:
            # 削除処理
            if remove:
                logger.debug("Remove rcv:[%s:%s]" % (msg.packet_no, msg.addr))
                self.received_que.remove(msg)

            # 封書の場合は開封パケットを送る
            # remove=Falseだと何回か開封パケットが飛ぶがエラーにはならないようなのでよしとする
            if msg.is_secretopt():
                ip_msg = IpmsgMessage(msg.addr, msg.port, msg.packet_no, self._get_packet_no(), self.user_name)
                ip_msg.set_flag(c.IPMSG_READMSG)
                self._send(ip_msg)

        return matched_received_list
Example #3
0
 def _request_host_list(self):
     """
     IPMSG_BR_ISGETLIST2を送信しホストリストを送ってくれる相手を探す
     :return:
     """
     # 実行日を保持
     self._last_get_listed_time = datetime.datetime.now()
     #1:801798212:root:falcon:6291480:(\00)
     for broad_addr in self.broad_cast_addrs:
         ip_msg = IpmsgMessage(broad_addr, self.use_port, "", self._get_packet_no(), self.user_name)
         ip_msg.set_flag(c.IPMSG_BR_ISGETLIST2)
         self._send(ip_msg)
Example #4
0
    def _entry(self):
        """
        ネットワークに参加
        ブロードキャストで伝える
        """
        # Ver : PacketNo : User : Host : Command : Msg
        #send_msg = "1:%s:sayamada:B1308-66-01:%d:sayamada\00sayamada_group\00" % (self.get_packet_no(), command)
        send_msg = "%s\00%s" % (self.user_name, self.group_name)

        for broad_addr in self.broad_cast_addrs:
            ip_msg = IpmsgMessage(broad_addr, self.use_port, send_msg, self._get_packet_no(), self.user_name)
            ip_msg.set_flag(c.IPMSG_BR_ENTRY)
            self._send(ip_msg)
Example #5
0
 def okgetlist_action(self, msg):
     """
     OKGETLISTを受け取ったら、相手にGETLISTを投げてホストリストを
     要求する
     :param msg: 受信メッセージ
     :return:
     """
     # add hostlist
     #logger.debug("okgetlist:" + msg.get_full_message())
     # "1:100:sender:sender-pc:18:0"
     ip_msg = IpmsgMessage(msg.addr, msg.port, str(0), self._get_packet_no(), self.user_name)
     ip_msg.set_flag(c.IPMSG_GETLIST)
     self._send(ip_msg)
Example #6
0
 def _request_host_list(self):
     """
     IPMSG_BR_ISGETLIST2を送信しホストリストを送ってくれる相手を探す
     :return:
     """
     # 実行日を保持
     self._last_get_listed_time = datetime.datetime.now()
     #1:801798212:root:falcon:6291480:(\00)
     for broad_addr in self.broad_cast_addrs:
         ip_msg = IpmsgMessage(broad_addr, self.use_port, "",
                               self._get_packet_no(), self.user_name)
         ip_msg.set_flag(c.IPMSG_BR_ISGETLIST2)
         self._send(ip_msg)
Example #7
0
    def _entry(self):
        """
        ネットワークに参加
        ブロードキャストで伝える
        """
        # Ver : PacketNo : User : Host : Command : Msg
        #send_msg = "1:%s:sayamada:B1308-66-01:%d:sayamada\00sayamada_group\00" % (self.get_packet_no(), command)
        send_msg = "%s\00%s" % (self.user_name, self.group_name)

        for broad_addr in self.broad_cast_addrs:
            ip_msg = IpmsgMessage(broad_addr, self.use_port, send_msg,
                                  self._get_packet_no(), self.user_name)
            ip_msg.set_flag(c.IPMSG_BR_ENTRY)
            self._send(ip_msg)
Example #8
0
 def okgetlist_action(self, msg):
     """
     OKGETLISTを受け取ったら、相手にGETLISTを投げてホストリストを
     要求する
     :param msg: 受信メッセージ
     :return:
     """
     # add hostlist
     #logger.debug("okgetlist:" + msg.get_full_message())
     # "1:100:sender:sender-pc:18:0"
     ip_msg = IpmsgMessage(msg.addr, msg.port, str(0),
                           self._get_packet_no(), self.user_name)
     ip_msg.set_flag(c.IPMSG_GETLIST)
     self._send(ip_msg)
Example #9
0
 def br_entry_action(self, msg):
     """
     BR_ENTRYを受け取ったらANSENTRYを戻して相手に自分を伝える。
     さらに送信元を自分のホストリストに追加する
     :param msg: 受信メッセージ
     :return:
     """
     logger.debug("br_entry:" + msg.get_full_message().__repr__())
     send_msg = "%s\00%s" % (self.user_name, self.group_name)
     ip_msg = IpmsgMessage(msg.addr, msg.port, send_msg, self._get_packet_no(), self.user_name)
     ip_msg.set_flag(c.IPMSG_ANSENTRY)
     logger.debug("br_entry_re:" + ip_msg.get_full_message().__repr__())
     self._send(ip_msg)
     # ホストリストへ追加
     self._add_host_list(IpmsgHostinfoParser(msg))
Example #10
0
 def br_entry_action(self, msg):
     """
     BR_ENTRYを受け取ったらANSENTRYを戻して相手に自分を伝える。
     さらに送信元を自分のホストリストに追加する
     :param msg: 受信メッセージ
     :return:
     """
     logger.debug("br_entry:" + msg.get_full_message().__repr__())
     send_msg = "%s\00%s" % (self.user_name, self.group_name)
     ip_msg = IpmsgMessage(msg.addr, msg.port, send_msg,
                           self._get_packet_no(), self.user_name)
     ip_msg.set_flag(c.IPMSG_ANSENTRY)
     logger.debug("br_entry_re:" + ip_msg.get_full_message().__repr__())
     self._send(ip_msg)
     # ホストリストへ追加
     self._add_host_list(IpmsgHostinfoParser(msg))
Example #11
0
    def sendmsg_action(self, msg):
        """
        ほかのホストからメッセージを受け取ったときのアクション
        RECVMSGは無視
        :param msg: 受信メッセージ
        :return:
        """
        logger.debug("sendmsg:" + msg.get_full_unicode_message())
        # SENDCHEKOPTならRECVMSGを戻さないと相手は受信したことがわからない
        if msg.is_sendcheckopt():
            ip_msg = IpmsgMessage(msg.addr, msg.port, msg.packet_no, self._get_packet_no(), self.user_name)
            ip_msg.set_flag(c.IPMSG_RECVMSG)
            self._send(ip_msg)

        # RCVの場合はただの返答パケットなので無視しないといけない
        if not msg.is_recvmsg():
            self._sendmsg_handler(msg)
            msg.born_now()
            self.received_que.append(msg)
Example #12
0
    def sendmsg_action(self, msg):
        """
        ほかのホストからメッセージを受け取ったときのアクション
        RECVMSGは無視
        :param msg: 受信メッセージ
        :return:
        """
        logger.debug("sendmsg:" + msg.get_full_unicode_message())
        # SENDCHEKOPTならRECVMSGを戻さないと相手は受信したことがわからない
        if msg.is_sendcheckopt():
            ip_msg = IpmsgMessage(msg.addr, msg.port, msg.packet_no,
                                  self._get_packet_no(), self.user_name)
            ip_msg.set_flag(c.IPMSG_RECVMSG)
            self._send(ip_msg)

        # RCVの場合はただの返答パケットなので無視しないといけない
        if not msg.is_recvmsg():
            self._sendmsg_handler(msg)
            msg.born_now()
            self.received_que.append(msg)
Example #13
0
    def send_message(self, to_addr, msg, is_secret=False):
        """
        メッセージを送信する。実際は送信待ちキューへの追加
        :param to_addr:送信先アドレス
        :param msg:送るメッセージの文字列
        :param is_secret: 封書として送るか
        :return:送信完了追跡用のパケット番号
        """
        # Ver(1) : Packet No : MyUserName : MyHostName : Command : Extra
        packet_no = self._get_packet_no()
        # 送信に必要な情報を添えてIpmsgMessageインスタンスにする
        ip_msg = IpmsgMessage(to_addr, self.use_port, msg, packet_no, self.user_name)
        # IPMSG_SENDMSGフラグを立てる
        ip_msg.set_sendmsg()

        if is_secret:
            ip_msg.set_secretopt()

        self._send(ip_msg)

        return packet_no
Example #14
0
    def send_message(self, to_addr, msg, is_secret=False):
        """
        メッセージを送信する。実際は送信待ちキューへの追加
        :param to_addr:送信先アドレス
        :param msg:送るメッセージの文字列
        :param is_secret: 封書として送るか
        :return:送信完了追跡用のパケット番号
        """
        # Ver(1) : Packet No : MyUserName : MyHostName : Command : Extra
        packet_no = self._get_packet_no()
        # 送信に必要な情報を添えてIpmsgMessageインスタンスにする
        ip_msg = IpmsgMessage(to_addr, self.use_port, msg, packet_no,
                              self.user_name)
        # IPMSG_SENDMSGフラグを立てる
        ip_msg.set_sendmsg()

        if is_secret:
            ip_msg.set_secretopt()

        self._send(ip_msg)

        return packet_no