Sockets - bloqueo mientras espera datos
Publicado por Cesar (6 intervenciones) el 24/08/2015 22:40:21
Buenas tengo una duda que no puedo resolver y espero que puedan ayudarme.
Eh estado programando un juego de ajedrez con modalidad para jugar en red contra otra persona usando python y pygame para su interfaz grafica.
El juego en general funciona perfectamente excepto por una cosa.
Los datos de movimientos se envian en su turno o sea si es turno de piezas blancas el jugador de piezas negras se queda esperando que haga su movimiento para actualizar su tablero con los movimientos enviados.
Mientras sc.recv(1024) espera los datos bloquea todo el juego hasta que lleguen los datos ocasionando que si el jugador que espera intente hacer algo como tratar de salir del juego mientras no sea su turno la ventana de pygame deje de responder y se cuelgue.
De que forma puedo evitar que el juego deje de responder si el jugador de espera intenta hacer algo cuando no es su turno?
El codigo de juego es largo asi que solo muestro una parte, si se necesita mas informacion para saber el problema no duden en avisarme.
Muchas gracias
Eh estado programando un juego de ajedrez con modalidad para jugar en red contra otra persona usando python y pygame para su interfaz grafica.
El juego en general funciona perfectamente excepto por una cosa.
Los datos de movimientos se envian en su turno o sea si es turno de piezas blancas el jugador de piezas negras se queda esperando que haga su movimiento para actualizar su tablero con los movimientos enviados.
Mientras sc.recv(1024) espera los datos bloquea todo el juego hasta que lleguen los datos ocasionando que si el jugador que espera intente hacer algo como tratar de salir del juego mientras no sea su turno la ventana de pygame deje de responder y se cuelgue.
De que forma puedo evitar que el juego deje de responder si el jugador de espera intenta hacer algo cuando no es su turno?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#conexion server
def MainLoop(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((direccionIP, 9999))
s.listen(1)
print "Esperando conexion..."
sc, addr = s.accept()
#espera de datos server
if currentColor== 'negro'
recibido = sc.recv(1024) #mientras no reciba datos juego congelado con posibildad de cuelgue
numero=int(recibido)
Aa=numero/1000
AA=numero%1000
Ee=AA/100
EE=AA%100
Ii=EE/10
II=EE%10
moveTuple=(Aa,Ee),(Ii,II)
Muchas gracias
Valora esta pregunta
0