#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