Ejemplo n.º 1
0
def main(port):
    ip = getCurrMachineIp()
    socket = zhelper.newServerSocket(zmq.REP, ip, port)
    db = Db("TrackerDB")
    while(True):
        nodeRequestData = socket.recv_json()
        socket.send_string("ACK")
        handle(nodeRequestData, db)
Ejemplo n.º 2
0
 def __init__(self, port):
     ip = getCurrMachineIp()
     self.username, self.password = None, None
     self.socket = zhelper.newServerSocket(zmq.REP, ip, port)
     self.db = Db("TrackerDB")
     self.uploader = Uploader(self.socket, self.db)
     self.downloader = Downloader(self.socket, self.db)
     self.fileExplorer = FileExplorer(self.socket, self.db)
Ejemplo n.º 3
0
def main(port):
    #? TODO: when to use udp protocol
    trackerSocket = zhelper.newSocket(zmq.REQ, TRACKER_IP,
                                      TRACKER_PORTS_KEEPERS)
    downloadUploadSocket = zhelper.newServerSocket(zmq.REP, getCurrMachineIp(),
                                                   port)
    downloader = Downloader(downloadUploadSocket, trackerSocket, port)
    uploader = Uploader(downloadUploadSocket, trackerSocket, port)
    while True:
        request = downloadUploadSocket.recv_json()
        print("request received:", request)
        username = authenticate(downloadUploadSocket, request.get("token"))
        downloadUploadSocket.send_string("ACK")
        if not username:
            continue
        del request["token"]
        request["username"] = username
        if request.get("function") == "download":
            uploader.upload(request)
        elif request.get("function") == "upload":
            downloader.download(request)
Ejemplo n.º 4
0
    def download(self, metadata):  # client upload a video to this node
        # =================================================================================
        #   1- [passed as a parameter]: receive the meta data of the file ==> username, filename, chunks numbers
        #   2- receive chunk by chunk
        #   3- write the file data under ./username/filename.mp4
        #   4- send the success message to the client
        #   5- send the success message to the tracker to free this port
        # =================================================================================
        username, filename, numChunks = metadata.get("username"), metadata.get(
            "filename"), metadata.get("numChunks")

        #send ack
        # self.socket.send_string("ACK")

        #start downloading
        vidData = []
        for _ in range(numChunks - 1):
            chunk = self.socket.recv()
            #send ack
            self.socket.send_string("ACK")
            vidData.append(chunk)
        chunk = self.socket.recv()
        vidData.append(chunk)

        # write the video on the machine disk under this user dir
        writeVideo(vidData, f"{username}/{filename}")

        # till the tracker that process is done to update the database
        self.trackerSocket.send_json({
            "function": "download",
            "filename": filename,
            "username": username,
            "ip": getCurrMachineIp(),
            "port": self.myport
        })
        _ = self.trackerSocket.recv()

        #send success to the client
        self.socket.send_string("SUCCESS")
Ejemplo n.º 5
0
 def __init__(self):
     self.ip = getCurrMachineIp()
     self.socket = zhelper.newServerSocket(zmq.PUB, self.ip, ALIVE_PORT)