#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. |