Remove some code doesn't follow DRY-Rule & Let main client can safely close

This commit is contained in:
snsd0805 2020-06-28 23:11:43 +08:00
parent 62fc412e95
commit 1a68e3b3dd
2 changed files with 34 additions and 34 deletions

41
draw.py
View File

@ -22,22 +22,15 @@ def drawerReceive(sock,screen):
if data[0:6] == "[list]": if data[0:6] == "[list]":
drawUserList(data,screen) drawUserList(data,screen)
def sendDraw(sock,nowUserList): def sendDraw(sock,nowUserList,screen):
white= (255, 255, 255)
black= (0, 0, 0)
pygame.init()
pygame.display.set_caption('Mouse Example')
size= [1080, 480]
screen= pygame.display.set_mode(size)
clock= pygame.time.Clock()
screen.fill((255, 255, 255)) screen.fill((255, 255, 255))
white= (255, 255, 255)
black= (0, 0, 0)
clock= pygame.time.Clock()
# 開始話user list # 開始話user list
drawUserList(nowUserList,screen) drawUserList(nowUserList,screen)
drawerRecvThreading = threading.Thread(target=drawerReceive,args=(sock,screen)) drawerRecvThreading = threading.Thread(target=drawerReceive,args=(sock,screen),daemon=True)
drawerRecvThreading.start() drawerRecvThreading.start()
# 使系統滑鼠圖標不可見 # 使系統滑鼠圖標不可見
#pygame.mouse.set_visible(False) #pygame.mouse.set_visible(False)
@ -48,11 +41,11 @@ def sendDraw(sock,nowUserList):
pygame.display.update() pygame.display.update()
tempPos = () tempPos = ()
while True: detectFlag = True
while detectFlag:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type== pygame.QUIT: if event.type== pygame.QUIT:
pygame.quit() detectFlag = False
sys.exit()
# 如果按下滑鼠 # 如果按下滑鼠
# get_pressed() 告訴您按下哪個滑鼠按鈕 # get_pressed() 告訴您按下哪個滑鼠按鈕
@ -73,6 +66,7 @@ def sendDraw(sock,nowUserList):
if(pygame.mouse.get_pos()!=tempPos): if(pygame.mouse.get_pos()!=tempPos):
sock.send("{}+".format(pygame.mouse.get_pos()).encode('utf-8')) sock.send("{}+".format(pygame.mouse.get_pos()).encode('utf-8'))
pygame.draw.circle(screen,black,pygame.mouse.get_pos(),5,0) pygame.draw.circle(screen,black,pygame.mouse.get_pos(),5,0)
pygame.display.update()
tempPos = pygame.mouse.get_pos() tempPos = pygame.mouse.get_pos()
@ -83,10 +77,8 @@ def sendDraw(sock,nowUserList):
#pos= (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]) #pos= (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
#pygame.draw.circle(screen, black, pos, 5, 0) #pygame.draw.circle(screen, black, pos, 5, 0)
pygame.display.update()
clock.tick(30) clock.tick(30)
startFlag = True startFlag = True
def guessInput(screen,sock): def guessInput(screen,sock):
@ -112,25 +104,16 @@ def guessInput(screen,sock):
screen.blit(pgStringVar,(120,455))# draw font screen.blit(pgStringVar,(120,455))# draw font
pygame.display.update() pygame.display.update()
def receiveDraw(sock): def receiveDraw(sock,screen):
global startFlag
white= (255, 255, 255) white= (255, 255, 255)
black= (0, 0, 0) black= (0, 0, 0)
global startFlag
pygame.init()
pygame.display.set_caption('Mouse Example')
size= [1080, 480]
screen= pygame.display.set_mode(size)
clock= pygame.time.Clock()
screen.fill((255, 255, 255)) screen.fill((255, 255, 255))
pygame.draw.rect(screen,(171, 254, 250),[100,450,500,550],0) pygame.draw.rect(screen,(171, 254, 250),[100,450,500,550],0)
pygame.display.update() pygame.display.update()
print("draw start") print("draw start")
guessThreading = threading.Thread(target=guessInput,args=(screen,sock)) # guest input guessThreading = threading.Thread(target=guessInput,args=(screen,sock),daemon=True) # guest input
guessThreading.setDaemon(False)
guessThreading.start() guessThreading.start()
while startFlag: while startFlag:

27
main.py
View File

@ -1,5 +1,5 @@
import socket,threading,sys,random,multiprocessing,time import socket,threading,sys,random,multiprocessing,time
import draw import draw,pygame
import requests,json # Get problem import requests,json # Get problem
MAX = 1024 MAX = 1024
@ -19,7 +19,7 @@ class Server:
while True: while True:
sock,sockname = listensock.accept() sock,sockname = listensock.accept()
print("{} has connected.".format(sockname)) print("{} has connected.".format(sockname))
setTypeThread = threading.Thread(target = self.selectType,args=(sock,)) # Create a thread for communicating with client. setTypeThread = threading.Thread(target = self.selectType,args=(sock,),daemon=True) # Create a thread for communicating with client.
setTypeThread.start() setTypeThread.start()
def selectType(self,sock): def selectType(self,sock):
@ -112,7 +112,7 @@ class Room:
allPeerName.append(i.getpeername()) allPeerName.append(i.getpeername())
for sock in self.sockList: for sock in self.sockList:
sock.send("[list] {}".format(json.dumps(allPeerName)).encode('utf-8')) sock.send("[list] {}".format(json.dumps(allPeerName)).encode('utf-8'))
receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,),daemon=True)
# 負責與client通信傳輸遊戲所必須的指令 # 負責與client通信傳輸遊戲所必須的指令
receiveDataThread.start() receiveDataThread.start()
@ -177,6 +177,7 @@ class Client:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((self.ip,self.port)) sock.connect((self.ip,self.port))
self.setType(sock) self.setType(sock)
sock.close()
def setType(self,sock): def setType(self,sock):
print("Type in 'MAIN' to set a new room\nType in 'CLIENT' to join a room") print("Type in 'MAIN' to set a new room\nType in 'CLIENT' to join a room")
@ -189,6 +190,7 @@ class Client:
# get ROOMNUM and PORTNUM # get ROOMNUM and PORTNUM
connectData = receiveMsg.split(' ') connectData = receiveMsg.split(' ')
room = Room(self.ip,int(connectData[1])) room = Room(self.ip,int(connectData[1]))
sock.close()
sock = room.connect() # sock可覆蓋了 sock = room.connect() # sock可覆蓋了
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) # receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
@ -202,6 +204,7 @@ class Client:
receiveMsg = sock.recv(MAX).decode('utf-8') receiveMsg = sock.recv(MAX).decode('utf-8')
# Get port number # Get port number
room = Room(self.ip,int(receiveMsg)) room = Room(self.ip,int(receiveMsg))
sock.close()
sock = room.connect() # sock可覆蓋了 sock = room.connect() # sock可覆蓋了
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) # receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
@ -215,6 +218,18 @@ class Client:
userList = sock.recv(1024).decode('utf-8') userList = sock.recv(1024).decode('utf-8')
print("List: ",userList) print("List: ",userList)
## SET PYGAME
pygame.init()
pygame.display.set_caption('Mouse Example')
size= [1080, 480]
screen= pygame.display.set_mode(size)
screen.fill((255, 255, 255))
pgStringVar = pygame.font.Font(None,25).render("Please wait...",False,(0,0,0))# 文字物件
screen.blit(pgStringVar,(500,240))# draw font
pygame.display.update()
time.sleep(2)
continueFlag = False continueFlag = False
while not continueFlag: while not continueFlag:
@ -222,9 +237,10 @@ class Client:
role = data[1:5] role = data[1:5]
#print("Role: ",role) #print("Role: ",role)
if role == "prob": if role == "prob":
draw.sendDraw(sock,userList) draw.sendDraw(sock,userList,screen)
continueFlag = True
elif role == "gues": elif role == "gues":
draw.receiveDraw(sock) draw.receiveDraw(sock,screen)
continueFlag = True continueFlag = True
elif role == "list": elif role == "list":
userList = data userList = data
@ -232,6 +248,7 @@ class Client:
continueFlag = False continueFlag = False
else: #useless position else: #useless position
continueFlag = False continueFlag = False
pygame.quit()
# def receiveData(self,sock): # def receiveData(self,sock):
# while True: # while True:
# data = sock.recv(MAX).decode('utf-8') # data = sock.recv(MAX).decode('utf-8')