#include <IPC/mensageiro.H>
Mostrar lista completa dos membros
Membros públicos | |
| Mensageiro (key_t const chave=getuid()) | |
| Contrutor de um mensageiro. Mais... | |
| ~Mensageiro () | |
| Destrutor. | |
| string | meuIdentificador () |
| Devolve um identificador único para o processo, que consiste no nome do utilizador seguido do número do processo. | |
| string | identificadorDoOutro () |
| Devolve o identificador único do outro processo, com o qual o corrente está emparelhado através do mensageiro. | |
| string | stringRecebida () |
| Devolve uma cadeia de caracteres recebida do outro. | |
| int | intRecebido () |
| Devolve um inteiro recebido do outro. | |
| char | charRecebido () |
| Devolve um caractere recebido. | |
| void | envia (string const &mensagem) |
| Envia uma cadeia de caracteres ao outro. | |
| void | envia (int const valor) |
| Envia um inteiro ao outro. | |
| void | envia (char const c) |
| Envia um caractere ao outro. | |
Esta classe é um solitão! A ideia é que um processo com uma instância desta classe fica em comunicação com outro com outra instância da mesma classe. A selecção do outro processo é feita automaticamente, de acordo com as disponibilidades. A ideia é permitir a comunicação entre dois processos do mesmo jogo, sendo que os jogadores não têm controlo sobre que será o seu opositor.
Nas descrições usa-se o termo "eu" para indicar o processo corrente, e "outro" para indicar o processo a que o "eu" está emparelhado pelo mensageiro.
A comunicação faz-se enviando e recebendo mensagens. As mensagens enviadas e recebidas são, por enquanto, de apenas três tipos: char, int e string. Não existe, para já, nenhuma forma de indagar se há alguma mensagem disponível para ser recebida e muito menos saber o seu tipo. O protocolo entre os processos é que tem de garantir que os processos recebem tantas mensagens quantas as enviadas pelo outro, enviam tantas mensagens quantas as recebidas pelo outro, e com tipos compatíveis.
A classe é simples de usar. Por exemplo, suponha que se pretendia fazer um pequeno jogo em que ganha quem gerar um número aleatório maior. Poder-se-ia escrever:
include <IPC/mensageiro.H> // ou include <IPC/ipc.H>
include <cstdlib>
include <ctime>
using namespace IPC;
int main()
{
// Se não se fizer isto os jogadores geram sempre o mesmo número
// aleatório...
srand(time(0));
try {
// Construir mensageiro:
Mensageiro mensageiro;
// Escrever identificações:
cout << "Eu sou o " << mensageiro.meuIdentificador() << endl;
cout << "Ele é o " << mensageiro.identificadorDoOutro() << endl;
// Gerar número aleatório:
int meu = rand();
// Enviá-lo ao adversário:
mensageiro.envia(meu);
// Receber número do adeversário:
int dele = mensageiro.intRecebido();
// Verificar resultado:
if(meu < dele)
cout << "Perdi " << meu << " contra " << dele << "..."
<< endl;
else if(meu > dele)
cout << "Ganhei " << meu << " contra " << dele << '!'
<< endl;
else
cout << "Empatámos " << meu << " a " << dele << '.'
<< endl;
} catch(Erro& erro) {
cerr << string(erro) << endl;
}
}
Definido na linha 95 do ficheiro mensageiro.H.
|
|
Contrutor de um mensageiro. Podem-se criar mensageiros de dois tipos: restritos ou não restritos. O primeiro tipo consegue-se não passando qualquer argumento ao construtor e restringe o emparelhamento dos processos a processos do mesmo utilizador. O segundo tipo é mais geral, pois permite o emparelhamento de processos de utilizadores arbitrários da mesma máquina, mas exige a passagem de uma chave ipc que deve ser única para cada tipo de aplicação prevista. |
|
|
Destrutor.
|
|
|
Devolve um caractere recebido.
Definido na linha 19 do ficheiro mensageiro_impl.H. |
|
|
Envia um caractere ao outro.
Definido na linha 31 do ficheiro mensageiro_impl.H. |
|
|
Envia um inteiro ao outro.
Definido na linha 27 do ficheiro mensageiro_impl.H. |
|
|
Envia uma cadeia de caracteres ao outro.
Definido na linha 23 do ficheiro mensageiro_impl.H. |
|
|
Devolve o identificador único do outro processo, com o qual o corrente está emparelhado através do mensageiro.
Definido na linha 6 do ficheiro mensageiro_impl.H. |
|
|
Devolve um inteiro recebido do outro.
Definido na linha 15 do ficheiro mensageiro_impl.H. |
|
|
Devolve um identificador único para o processo, que consiste no nome do utilizador seguido do número do processo.
Definido na linha 1 do ficheiro mensageiro_impl.H. |
|
|
Devolve uma cadeia de caracteres recebida do outro.
Definido na linha 11 do ficheiro mensageiro_impl.H. |
1.2.6 escrito por Dimitri van Heesch,
© 1997-2001