Jump to content

Como fazer um cliente esperar por outro?


angelicous
 Share

Recommended Posts

Boas pessoal precisava de ajuda para tentar perceber como poderia alcançar o seguinte.

Eu queria fazer um programa onde clientes falassem entre si, mas só podiam ser conversas entre determinados tipos.

Imaginemos que eu queria fazer um chat que metia duas pessoas a falar aleatoriamente numa sala privada. Mas só poderia colocar a falar homens com mulheres, nunca conversas entre o mesmo sexo(não sou homofóbico, simples exemplo).

A ideia que eu tinha em mente, era ter o servidor, a aceitar conexões, e quando um cliente se ligasse, indicasse o seu género M ou F. Se existisse alguém do sexo oposto à espera para conversa, arrancava uma thread com ambos os conectores, caso contrário, ficaria à espera...

A minha dúvida é, como é que eu notificaria, esse cliente em especifico, de forma a respeitar que era do sexo oposto, e que é o que está à espera à mais tempo?

Link to comment
Share on other sites

Ok, e se não for? Ficam dois clientes à espera da mesma pessoa depois?

O que eu estava a pensar, seria ter tipo 2 filas de espera, uma para M outra para F. Se chegar um M e a fila F estiver vazia, fazia-se um wait. Quando chegasse "uma" F, notificava o primeiro M da fila, e arrancava thread, com o connector dos dois. Agora tenho diversas dúvidas quanto a isto.

Primeira, como é que eu acordo algo especifico? Como é que acordo só o M da posição 3 do array, por exemplo. Segunda, acordam a que está "a dormir", antes de abrir a thread, ou depois?

Edited by angelicous
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.