Beispiel #1
0
    def run(self):
        while True:
            if time.time() - self.clearTime > 1800:
                self.packetSet.clear()
                self.clearTime = time.time()
            nodes = self.getAllNode()
            addedNode, deletedNode = self.diffNode(nodes)
            self.nodeList = nodes
			logger.debug(f"Add node: {addedNode}, deleted node: {deletedNode}")
			logger.debug(f"Len node {len(nodes)}, add node {len(addedNode)}, deleted node {len(deletedNode)}")
            nodeInfo = self.probeNode(addedNode)
            for (ip, info) in nodeInfo:
                # createdNode = Node(ip, info["username"], info["firstname"], info["lastname"],
                #                    info["faculty"], info["year"], info["groupID"], info)
                createdNode = Node(ip, info)
                self.eventListener.nodeJoin(createdNode)
                self.nodeMap[ip] = info
                self.reverseMap[info["username"]] = ip
            for ip in deletedNode:
                if ip in self.nodeMap:
                    info = self.nodeMap.get(ip)
                    # createdNode = Node(ip,info["username"],info["firstname"],info["lastname"],info["faculty"],info["year"],info["group_id"],info)
                    createdNode = Node(ip, info)
                    self.eventListener.nodeLeave(createdNode)
                    self.nodeMap.pop(ip)
                    self.reverseMap.pop(info["username"])
            self.info = UserService.infoBroadcast()
            self.sender.info = self.info
            self.sender.sendGroupBroadcast()
Beispiel #2
0
 def __init__(self):
     self.net = NetworkInterface()
     UserService.initMe(self.net.getInterfaceMac(), '', '', '', 1)
     self.macAddress = self.net.getInterfaceMac()
     self.nodeList = set()
     # self.selfInfo = mocSelf()
     self.selfInfo = UserService.infoBroadcast()
     self.nodeMap = dict()
     self.packetSet = set()
     self.reverseMap = dict()
     self.isRunning = False
     self.sender = Sender(self.reverseMap, self.selfInfo)
     self.eventListener = None
Beispiel #3
0
 def processData(self):
     logger.info("processing request...")
     # handling broadcast message
     self.info = UserService.infoBroadcast()
     if self.header["broadcast"]:
         if self.header["groupBroadcast"]:
             if self.info.get("groupID", "") == self.header["srcGroup"][4:]:
                 msg = GroupMessage(
                     self.header["srcUsername"], self.header["srcGroup"][4:], self.request)
                 self.eventListener.receiveMessageGroup(msg)
             else:
                 logger.debug(
                     f"The sender is from group {self.header['srcGroup']}, but this node is in group {self.info.get('groupID','')}")
                 logger.debug("Drop request; not from the same group")
         elif self.header["memberRq"]:
             if self.header["desGroup"][4:] == self.info.get("groupID", "") and self.info.get("role", "") == "admin":
                 req = Request(
                     self.header["srcUsername"], self.header["desGroup"][4:])
                 self.eventListener.receiveGroupJoinRequest(req)
             print(self.header['desGroup'][4:], self.info.get(
                 'groupID', ''), self.info.get('role', ''))
         elif self.header["nodeRep"]:
             groupInfo = GroupBroadcast(self.request)
             if self.addr not in self.nodeMap:
                 # This is new node
                 createdNode = Node(self.addr, self.request)
                 self.eventListener.nodeJoin(createdNode)
                 self.nodeMap[self.addr] = self.request
                 self.reverseMap[self.request["username"]] = self.addr
             self.eventListener.receiveGroupBroadcast(groupInfo)
         else:
             msg = BroadcastMessage(
                 self.header["srcUsername"], self.request)
             self.eventListener.receiveMessageBroadcast(msg)
     elif self.header["ackRq"]:
         self.eventListener.receiveJoinOK(self.header["srcGroup"][4:])
     elif self.header["denyRq"]:
         self.eventListener.receiveJoinDeny(self.header["srcGroup"][4:])
     else:
         # personal message
         msg = Message(self.header["srcUsername"], self.info.get(
             "username", ""), self.request)
         self.eventListener.receiveMessage(msg)
Beispiel #4
0
 def createNodeReplyMessage(self):
     self.info = UserService.infoBroadcast()
     contentJson = json.dumps(self.info)
     contentByte = contentJson.encode("utf-8")
     header = {
         "srcUsername": self.info.get("username", ""),
         "srcGroup": self.info.get("groupID", ""),
         "desGroup": "",
         "admin": self.info.get("isAdmin", ""),
         "member": self.info.get("isMember", ""),
         "broadcast": False,
         "groupBroadcast": False,
         "memberRq": False,
         "ackRq": False,
         "denyRq": False,
         "leaveRq": False,
         "nodeRq": False,
         "big": False,
         "nodeRep": True,
         "contentLength": len(contentByte),
     }
     messageHeader = packHeader(header)
     message = messageHeader + contentByte
     return message