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)
评论列表
文章目录