P2PChat_NonGUI.py 文件源码

python
阅读 30 收藏 0 点赞 0 评论 0

项目:P2PChat 作者: whcacademy 项目源码 文件源码
def do_Send():
    global currentState, user
    print("\nPress Send")
    # check stage
    stateLock.acquire()
    checkFlag = currentState.isAfter(States['NAMED'])
    stateLock.release()
    if not checkFlag:
        print("\nSend Error: You are not in any chatroom, please join a chatroom first!")
        userentry.delete(0, END)
        return
    inputData = userentry.get()
    if len(inputData.strip(' ')) == 0:
        print("\nSend Error: Invalid message!")
        return
    # check for all back and forward link
    sendingList = []
    stateLock.acquire()
    forwardLinkTuple = currentState._getforwardlink()
    if forwardLinkTuple is not None:
        forwardLink = forwardLinkTuple[1] 
        sendingList.append(forwardLink)
    backwardLinkTupleList = currentState._getbackwardlinks()
    backwardLinks = [i[1] for i in backwardLinkTupleList]
    roomName = currentState._getroomname()
    stateLock.release()
    if len(backwardLinks) > 0 :
        sendingList = sendingList + backwardLinks
    # get all infos desired by sending Textmessage
    print("locked at 1067")
    userInfoLock.acquire()
    userName = user._getname()
    userIp = user._getip()
    userPort = user._getport()
    # update msgID
    msgID = currentState.newMsgID()
    userInfoLock.release()
    print("1067 released")

    # construct the protocal message
    originHID = sdbm_hash(userName+userIp+str(userPort))
    message = [roomName, str(originHID), userName, str(msgID), str(len(inputData)), inputData]
    requestMessage = 'T:' + ':'.join(message) + PROTOCAL_END
    print("\nMain Thread: perform the sending process, dispatch data to other peers\n")

    print('Message:', requestMessage)
    for socket in sendingList:
        output = socketOperation(socket, requestMessage, receive = False)
        if output == Exceptions['SOCKET_ERROR']:
            print('Send Error: cannot sent the message to', socket.getsockname())
    print('\n['+userName+']: '+inputData)

    # clear the entry if success
    userentry.delete(0, END)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号