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

27
main.py
View File

@ -1,5 +1,5 @@
import socket,threading,sys,random,multiprocessing,time
import draw
import draw,pygame
import requests,json # Get problem
MAX = 1024
@ -19,7 +19,7 @@ class Server:
while True:
sock,sockname = listensock.accept()
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()
def selectType(self,sock):
@ -112,7 +112,7 @@ class Room:
allPeerName.append(i.getpeername())
for sock in self.sockList:
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通信傳輸遊戲所必須的指令
receiveDataThread.start()
@ -177,6 +177,7 @@ class Client:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((self.ip,self.port))
self.setType(sock)
sock.close()
def setType(self,sock):
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
connectData = receiveMsg.split(' ')
room = Room(self.ip,int(connectData[1]))
sock.close()
sock = room.connect() # sock可覆蓋了
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
@ -202,6 +204,7 @@ class Client:
receiveMsg = sock.recv(MAX).decode('utf-8')
# Get port number
room = Room(self.ip,int(receiveMsg))
sock.close()
sock = room.connect() # sock可覆蓋了
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
@ -215,6 +218,18 @@ class Client:
userList = sock.recv(1024).decode('utf-8')
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
while not continueFlag:
@ -222,9 +237,10 @@ class Client:
role = data[1:5]
#print("Role: ",role)
if role == "prob":
draw.sendDraw(sock,userList)
draw.sendDraw(sock,userList,screen)
continueFlag = True
elif role == "gues":
draw.receiveDraw(sock)
draw.receiveDraw(sock,screen)
continueFlag = True
elif role == "list":
userList = data
@ -232,6 +248,7 @@ class Client:
continueFlag = False
else: #useless position
continueFlag = False
pygame.quit()
# def receiveData(self,sock):
# while True:
# data = sock.recv(MAX).decode('utf-8')