Página principal   Lista de namespaces   Hierarquia de classes   Lista de componentes   Lista de ficheiros   Membros do namespace   Componentes   Declarações  

Referencia à classe IPC::Mensageiro

Classe cuja única instância (em cada processo) representa um mensageiro entre o processo em causa e um outro na mesma máquina. Mais...

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


Descrição detalhada

Classe cuja única instância (em cada processo) representa um mensageiro entre o processo em causa e um outro na mesma máquina.

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.


Documentação do Construtor & Destrutor

IPC::Mensageiro::Mensageiro ( key_t const chave = getuid() )
 

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.

IPC::Mensageiro::~Mensageiro ( )
 

Destrutor.


Documentação dos métodos

char IPC::Mensageiro::charRecebido ( ) [inline]
 

Devolve um caractere recebido.

Definido na linha 19 do ficheiro mensageiro_impl.H.

void IPC::Mensageiro::envia ( char const c ) [inline]
 

Envia um caractere ao outro.

Definido na linha 31 do ficheiro mensageiro_impl.H.

void IPC::Mensageiro::envia ( int const valor ) [inline]
 

Envia um inteiro ao outro.

Definido na linha 27 do ficheiro mensageiro_impl.H.

void IPC::Mensageiro::envia ( string const & mensagem ) [inline]
 

Envia uma cadeia de caracteres ao outro.

Definido na linha 23 do ficheiro mensageiro_impl.H.

string IPC::Mensageiro::identificadorDoOutro ( ) [inline]
 

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.

int IPC::Mensageiro::intRecebido ( ) [inline]
 

Devolve um inteiro recebido do outro.

Definido na linha 15 do ficheiro mensageiro_impl.H.

string IPC::Mensageiro::meuIdentificador ( ) [inline]
 

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.

string IPC::Mensageiro::stringRecebida ( ) [inline]
 

Devolve uma cadeia de caracteres recebida do outro.

Definido na linha 11 do ficheiro mensageiro_impl.H.


A documentação para esta classe foi gerada a partir dos seguintes ficheiros:
Gerado em Tue Apr 10 15:38:16 2001 para Pacotes por doxygen1.2.6 escrito por Dimitri van Heesch, © 1997-2001