def file_send(self, ip, port, checkcode, toname, filepath): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, int(port))) f = open(filepath, "rb") sheet = SHEET() sheet.fill("P2PFILESEND", self.Username, filepath) sheet.headAdd("CheckCode", checkcode) s = f.read(800) while s: sheet.fill_body(s) sock.send(sheet.toStr()) print "[330] file send", sheet.toStr() s = f.read(800) time.sleep(0.1) f.close() sock.close() print "[386]---------------------" self.fileLock.acquire() input = open("./buffer/"+self.Username+"/"+toname, "a") input.write("["+self.Username+"] " + " <finish sending file: " + filepath + ">\n") input.close() self.fileLock.release()
def beat_handle(clientsock): global Status, Username cur_time = time.time() while Status["login"]: if time.time() - cur_time > BEAT_TIME: cur_time = time.time() sheet = SHEET() sheet.fill("BEAT", Username) clientsock.send(sheet.toStr()) else: time.sleep(1)
def beat_handle(self, clientsock): global Status, Username cur_time = time.time() while self.Status["login"]: if time.time() - cur_time > self.BEAT_TIME: print "[173] beat_handle" cur_time = time.time() sheet = SHEET() sheet.fill("BEAT", self.Username) clientsock.send(sheet.toStr()) else: time.sleep(1)
def update_handle(username, status): global NameList, AllSocket sheet = SHEET() sheet.fill("UPDATE", username, status) for name in AllSocket: if NameList.has_key(name) and NameList[name][0] == True: s = AllSocket[name] try: s.send(sheet.toStr()) except: continue print "# send UPDATE to everyone. [" + username +"="+ status + "]"
def getlist_handle(clientsock): print "# recv GETLIST request." list_body = listname() list = SHEET() list.fill("LIST") list.fill_body(list_body) list.headAdd("Content-Length", str(len(list.Body))) clientsock.send(list.toStr()) print "# send LIST reply." print "# current LIST: " print_NameList()
def file_send(ip, port, checkcode, filepath): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, int(port))) f = open(filepath, "rb") sheet = SHEET() sheet.fill("P2PFILESEND", Username, filepath) sheet.headAdd("CheckCode", checkcode) s = f.read(800) while s: sheet.fill_body(s) sock.send(sheet.toStr()) #print "[330] file send", sheet.toStr() s = f.read(800) time.sleep(0.1) f.close() sock.close()
def message_handle(clientsock, username, content_str): global NameList, AllSocket sheet = SHEET() sheet.fill("CSMESSAGE", username) sheet.fill_body(content_str) for name in AllSocket: if NameList.has_key(name) and NameList[name][0] == True: s = AllSocket[name] s.send(sheet.toStr()) print "# send CSMESSAGE to everyone."
def make_sheet(self, cmd): sheet = SHEET() if cmd[0]=="LOGIN": self.Username = cmd[1] sheet.fill(cmd[0], cmd[1]) sheet.headAdd("Port", str(self.MY_PORT)) elif cmd[0]=="GETLIST": sheet.fill(cmd[0]) elif cmd[0]=="LEAVE": sheet.fill(cmd[0], self.Username) elif cmd[0]=="MESSAGE": sheet.fill(cmd[0], self.Username) msg = cmd[1] if len(cmd)>2: for content in cmd[2:]: msg = msg+" "+content sheet.fill_body(msg) elif cmd[0]=="P2PMESSAGE": sheet.Version = "P2P1.0" sheet.fill(cmd[0], self.Username) msg = cmd[2] if len(cmd)>3: for content in cmd[3:]: msg = msg+" "+content sheet.fill_body(msg) elif cmd[0]=="P2PFILE": sheet.Version = "P2P1.0" sheet.fill(cmd[0], self.Username, cmd[2]) sheet.headAdd("Query", "1") code = get_code() self.SendCode[cmd[2]] = code sheet.headAdd("SendCode", code) elif cmd[0]=="P2PFILEACCEPT": sheet.Version = "P2P1.0" sheet.fill(cmd[0], self.Username, cmd[2]) try: print "[109]", self.RecvCode print "[110]", cmd[2] print "[111]" sheet.headAdd("RecvCode", self.RecvCode[cmd[2]]) except: sheet.headAdd("RecvCode", "00000000000000000000000000000000") # reply an wrong code code = get_code() self.ReplyCode[cmd[2]] = code sheet.headAdd("ReplyCode", code) fileport = find_idle_port() sheet.headAdd("FILEPORT", fileport) # new a thread to recv file file_thread = thread.start_new_thread(self.file_recv, (fileport, cmd[2],)) sheet.headAdd("Content-Length", len(sheet.Body)) date = time.strftime("%H:%M:%S@%Y-%m-%d", time.localtime()) sheet.headAdd("Date", date) return sheet
def login_handle(sheet_str, clientsock, clientaddr): global AllSocket sheet = sheet_toForm(sheet_str) # LOGIN ---------------------------------------- if sheet.Cmd=="LOGIN": print "# recv LOGIN request." if sheet.Arg!="" and is_off(sheet.Arg): NameList[sheet.Arg] = [True, clientaddr[0], sheet.Headline["Port"], time.time()] print "# ONLINE. [" + sheet.Arg + "]" status = SHEET() status.fill("STATUS", "1") else: status = SHEET() status.fill("STATUS", "0") if not is_off(sheet.Arg): status.fill_body("@@@ username is online!\n") status.headAdd("Content-Length", str(len(status.Body))) if status.Arg == "1": clientsock.send(status.toStr()) #send status print "# send STATUS reply. [status=" + status.Arg + "]" time.sleep(0.01) getlist_handle(clientsock) update_handle(sheet.Arg, "1") AllSocket[sheet.Arg] = clientsock return True, sheet.Arg else: clientsock.send(status.toStr()) print "# send STATUS reply. [status=" + status.Arg + "]" print "# someone LOGIN FAIL(1)." return False, ""