Todos os arquivos.c e.h criados (exigido código muito bem documentado!). O makefile.



Documentos relacionados
Cada cliente, necessariamente, sempre deve estar conectado a um Broker, e somente um;

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Como funciona? SUMÁRIO

Especificação do 3º Trabalho

Engenharia de Software III

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Manual (Office 365) Para acesso ao sistema de s, os passos iniciais continuam os mesmos.

3 Arquitetura do Sistema

Manual do Visualizador NF e KEY BEST

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Trabalho Prático 1 Tipos Abstratos de Dados

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

Manual de utilização do sistema OTRS (Atendimento) Cliente Externo

Índice: CMS 3 O que é Content Management System? Clientes 4 O que é o Cliente? 4 Configurando o i-menu/i-view para trabalhar. com o CMS.

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

Síntese das discussões do fórum Livro-APF: Julho/2010

Manual SAGe Versão 1.2 (a partir da versão )

Tutorial: Webmail. Dicas de Uso e Funcionalidades 02/2015. Versão 01

Manual Captura S_Line

Layout : Este layout desenvolvido com html5 e css3 e compatível com qualquer dispositivo, ou seja, ele se molda para qualquer resolução, tablet,

Sistemas Operacionais

Manual Portal Ambipar

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

WF Processos. Manual de Instruções

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Versão /10. Xerox ColorQube 9301/9302/9303 Serviços de Internet

FCT Faculdade de Ciências e Tecnologia Serviço Técnico de Informática STI SGCD Sistema Gerenciador de Conteúdos Dinâmicos

Utilização do Webmail da UFS

Suponha que uma pasta esteja sendo exibida pelo Windows Explorer e os seguintes arquivos são exibidos:

SISTEMA DE ADMINISTRAÇÃO DE LOCAÇÃO IMOBILIÁRIA LISTA DE ATUALIZAÇÕES NOVAS

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO-GERAL DE MODERNIZAÇÃO E INFORMÁTICA

Manual do Usuário CFCWeb BA

Chave de Acesso Remoto Manual do cliente:

ROTINA DE INVENTÁRIO MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de ]

Manual Administrador - Mídia System

Trabalho 3: Agenda de Tarefas

Ajuda On-line - Sistema de Portaria. Versão 4.8.J

Manual do Ambiente Moodle para Professores

02 - Usando o SiteMaster - Informações importantes

Manual Programa SOSView 4.0

UNIMED-BH MANUAL DE AGENDAMENTO ON-LINE. acesse

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Manual de operação. BS Ponto Versão 5.1

MANUAL PARA EMISSÃO DO CERTIFICADO FITOSSANITÁRIO DE ORIGEM CONSOLIDADO (CFOC) ELETRÔNICO

GUIA BÁSICO DA SALA VIRTUAL

MANUAL DE NAVEGAÇÃO UNICURITIBA VIRTUAL

Tutorial Sistema de Eventos de Certificação e Capacitação

MANUAL DO ANIMAIL Terti Software

RESUMO DE CATALOGAÇÃO

4 / Nova tela de Descrição Cirúrgica - Médicos. O que mudou?

Estalo Desenvolvimento e Tecnologia Rua Ismael Carlos Correia, 107 CEP Joinville - SC estalo@estalo.com.br Fone/Fax: (47)

Manual Software Controle de Jukebox. Manual. Software Controle de Jukebox

Quinta Lista de Exercícios -

TUTORIAL MRV CORRETOR

Manual do Usuário - ProJuris Web - Fila de s Página 1 de 8

Tarefas em Moodle (1.6.5+)

Fundamentos de Sistemas Operacionais

Manual de Operação do Sistema de Tickets Support Suite

Gerenciador de Psicotropicos

Manual de Utilização Autorizador

Análise e Projeto Orientados a Objetos Aula IV Requisitos. Prof.: Bruno E. G. Gomes IFRN

Manual do usuário. Softcall Java. versão 1.0.5

Manual das funcionalidades Webmail AASP

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Funções básicas Cronograma Cronograma Funções Básicas

Processo de Controle das Reposições da loja

LINEAR EQUIPAMENTOS RUA SÃO JORGE, TELEFONE: SÃO CAETANO DO SUL - SP - CEP

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Trabalho 7 Fila de prioridade usando heap para simulação de atendimento

Manual de Instalação... 2 RECURSOS DESTE RELÓGIO REGISTRANDO O ACESSO Acesso através de cartão de código de barras:...

Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr.

MANUAL DE UTILIZAÇÃO Aplicativo Controle de Estoque Desktop

Sistema de de Bilhetagem Eletrônica MANUAL MÓDULO PDV

Melhorias e Correções Patch's

Manual SAGe Versão 1.2

Guia do Administrador de Licenças de Usuários Autorizados do IBM SPSS Modeler

MANUAL DE UTILIZAÇÃO DO SISTEMA DE NOTA FISCAL ELETRÔNICA e-nota

ÍNDICE 1 INTRODUÇÃO ACESSO ABERTURA DE PROTOCOLO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO.

Manual do Programa de Caixa1

Operações de Caixa. Versão 2.0. Manual destinado à implantadores, técnicos do suporte e usuários finais

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

TUTORIAL Última atualização: 23/03/2015

CONTABILIDADE COM MÚLTIPLOS PLANOS DE CONTAS

TOTVS BA Guia de Customização Linha Logix

Secretaria da Educação do Estado do Rio Grande do Sul. Manual: Sistema de Controle Patrimonial Inventário

Programação 2ºSemestre MEEC /2011. Programação 2º Semestre 2010/2011 Enunciado do projecto

Treinamento Sistema Condominium Módulo III

Manual do Ambiente Moodle para Alunos

Instruções de operação

PROGRAMA TERRITÓRIOS DA CIDADANIA. # Manual Operacional # Relatório de Execução - Data Base: 30/09/2012

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

"Manual de Acesso ao Moodle - Discente" 2014

Transcrição:

Universidade Federal do Espírito Santo Departamento de Informática Estruturas de Dados I (INF09292) 1o Trabalho Prático Período: 2014/2 Profa Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br Data de Entrega: 30/10/2014 Trabalho em Dupla Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista. Regras Importantes Não é tolerado plágio. Trabalhos copiados serão penalizados com zero. A data de entrega é inadiável. Para cada dia de atraso, é retirado um ponto da nota do trabalho. Material a entregar Impresso: Documentação do trabalho, que deve conter: o Introdução: descrição do problema a ser resolvido e visão geral sobre o funcionamento do programa (em termos de módulos, arquivos, etc.). o Implementação: descrição da implementação do programa. Devem ser detalhadas as estruturas de dados utilizadas (de preferência com diagramas ilustrativos), o funcionamento das principais funções utilizadas incluindo pré e pós condições, o formato de entrada e saída de dados, bem como decisões tomadas relativas aos casos e detalhes de especificação que porventura estejam omissos no enunciado. Modularize o seu programa usando a técnica de tipos abstratos de dados, como discutido em sala de aula. o Conclusão: comentários gerais sobre o trabalho e as principais dificuldades encontradas em sua implementação. o Bibliografia: bibliografia utilizada para o desenvolvimento do trabalho, incluindo sites da Internet se for o caso. Por email (ed20142@inf.ufes.br): o O assunto da mensagem deve ser ed201402:trab1:<nome1> <nome2> o Por exemplo: ed201402:trab1:<joaosilva> <mariasampaio> o Documentação do trabalho (em formato PDF). o o Todos os arquivos.c e.h criados (exigido código muito bem documentado!). O makefile.

1ª Errata (07/10/2014): As partes em vermelho foram RETIRADAS da especificação do trabalho. CRIACLIENTE <nome_cliente> <tipo_cliente> <nome_broker>: cria um cliente com o nome especificado, informando qual o seu tipo (P = Publisher, S = Subscriber, A = Ambos) e insere o cliente na lista de clientes do broker especificado; SUBSCREVE <id_subscrição> <nome_cliente> <tópico> <mensagem>: recebe um identificador único para a subscrição, o nome cliente que deseja subscrever, o tópico no qual deseja manifestar seu interesse; Ambas as descrições estavam erradas, uma vez que o tipo do cliente pode ser apenas P ou S, e não ambos ao mesmo tempo. Por sua vez, o parâmetro <mensagem> não é necessário na subscrição, apenas na publicação.

2ª Errata (23/10/2014): Os exemplos de arquivo de entrada e saída foram levemente alterados, pois havia uma pequena divergência entre a saída apresentada e a saída esperada. No arquivo de entrada: i. A função CRIABROKER estava escrita, erradamente, de forma separada: CRIA BROKER; ii. A primeira chamada do comando IMPRIMEREDE foi movida para a chamada antecedente a primeira chamada do comando VERIFICAMATCHING; iii. A segunda chamada da função IMPRIMEREDE estava escrita, erradamente, de forma separada: IMPRIME REDE; No arquivo de saída: i. Nas chamadas do comando IMPRIMEREDE, os vizinhos do brokerf foram apresentados como brokerd, brokere e brokerg, respectivamente, quando a ordem correta de apresentação é brokere, brokerd e brokerg, respectivamente; ii. Na segunda chamada do comando VERIFICAMATCHING a subscrição de id 2, do cliente3, aparecia no arquivo de saída de forma equivocada, uma vez que a mesma havia sido excluída anteriormente por meio do comando EXCLUISUBSCRICAO. Para evitar dúvidas, a seguinte frase: Clientes, Subscrições e Brokers podem ser excluídos. Publicações não podem ser excluídas. Foi alterada para: Clientes, Subscrições e Brokers podem ser excluídos. Publicações não podem ser excluídas por meio de comandos, assim como ocorre, por exemplo, com as subscrições por meio do comando EXCLUISUBSCRIÇÃO. Porém tanto as subscrições quanto as publicações devem ser excluídas assim que o cliente que as criou for removido da rede. Outro ponto importante é que apesar do arquivo de saída não apresentar possíveis erros (como tentar inserir duas vezes um cliente num mesmo broker, ou inserir um cliente em um broker que não existe na rede) o sistema deve ser capaz de lidar com essas falhas e continuar funcionando normalmente, sem que o usuário perceba que tal erro ocorreu. O sistema não deve parar sua execução em hipótese alguma ao detectar alguma falha do tipo.

Publish/Subscribe O uso de sistemas distribuídos tem crescido a cada dia. Grande parte desse crescimento deve-se à popularização dos dispositivos móveis, principalmente celulares e smartphones. Todos os dias, milhões de novos celulares e smartphones são inseridos no mercado, dispositivos que possuem os mais diversos tipos de softwares e hardwares. Apesar disso, esses dispositivos estão cada vez mais acoplados e conectados. Para atender os milhões de possíveis clientes espalhados por todo o mundo, se tem buscado criar sistemas desacoplados e flexíveis. Por mais diferente que seja a tecnologia usada em cada dispositivo ou sistema, existe uma busca cada vez maior na integração entre os mesmos. Essa demanda vem despertando o uso do paradigma Publish/Subscribe. Este paradigma permite que dispositivos que não se conhecem se comuniquem sem a necessidade de estarem conectados ou ligados num mesmo instante. No paradigma Publish/Subscribe, tipicamente, existem duas classes de entidades: uma denominada Publisher (produtor da informação), que publica um evento com informações sobre um determinado conceito ou assunto; e uma denominada Subscriber (consumidor da informação), que subscreve um evento informando sobre o que possui interesse e deseja receber atualizações e/ou notificações. Existe ainda um serviço responsável por prover o desacoplamento entre os dispositivos. O serviço fica encarregado de receber as informações, tanto dos Publishers quando dos Subscribers, analisálas e identificar quais Subscribers devem ser notificados a cerca de um determinado evento publicado. Uma vez identificado qual Subscriber deve ser notificado, é de sua responsabilidade também entregar essas notificações de forma correta. Quando uma informação de interesse do Subscriber é encontrada, dizemos que ocorreu o Matching entre as informações. Além disso, é possível que o serviço possua vários elementos intermediários, denominados Brokers, de forma a criar uma rede interna. A figura abaixo ilustra uma possível configuração de um sistema Publish/Subscribe. Figura 1. Possível configuração de um sistema Publish/Subscriber. Na imagem é possivel ver uma rede formada por 6 Brokers, com 3 Clientes, sendo dois Publishers e um Subscriber.

Este sistema Publish Subscribe, de forma simplificada, pode ser implementado com um conjunto de listas encadeadas: pode-se implementar uma lista de Brokers, na qual cada Broker possui uma lista de vizinhos (ou seja, os Brokers conectados diretamente a ele) e uma lista de clientes (ou seja, os Publishers e Subscribers conectados diretamente a ele), como mostrado na figura a seguir. Cada Cliente pode manter uma lista de suas publicações e subscrições. A figura a seguir sugere, de maneira geral, a organização das listas de vizinhos, clientes, e de suas publicações e subscrições. Como pode ser visto na Figura, este Broker possui 5 vizinhos e 5 clientes, sendo que os clientes C1 e C2 realizaram uma publicação cada. O cliente C3 realizou 3 subscrições. Por sua vez, o cliente C4 não realizou atividades. Neste trabalho, você deverá implementar um sistema Publish/Subscribe simplificado. Faz parte do trabalho projetar os Tipos Abstratos de Dados necessários, bem como implementá-los. Como padrão, insira os elementos ao final das listas.

Considerações Importantes Cada cliente, necessariamente, sempre deve estar conectado a um Broker, e somente um; Um Broker pode ter vários clientes e vários vizinhos (um broker não pode ser seu vizinho); Um cliente pode ser tanto consumidor, produtor, mas não os dois simultaneamente. Seu papel é definido em sua inicialização e deve ser mantido ao longo da execução; Clientes, Subscrições e Brokers podem ser excluídos. Publicações não podem ser excluídas por meio de comandos, assim como ocorre, por exemplo, com as subscrições por meio do comando EXCLUISUBSCRIÇÃO. Porém tanto as subscrições quanto as publicações devem ser excluídas assim que o cliente que as criou for removido da rede; Uma publicação deve conter, obrigatoriamente, um identificador único, um tópico e uma mensagem; Uma subscrição é constituída por um identificador único e um tópico; Não podem existir duas ações como mesmo ID, ou seja, não podem existir duas publicações com mesmo ID, duas subscrições com mesmo ID e nem mesmo uma publicação ou subscrição com mesmo ID. Para simplificar, considere que tanto as mensagens quanto os tópicos são compostos por apenas uma palavra, não sendo necessário se preocupar com nomes compostos. Detecção do Matching O matching ocorre quando uma publicação contém um dado de interesse de algum Subscriber, ou seja, publicação e subscrição possuem o mesmo tópico. Uma mesma publicação pode gerar mais de um matching, um para cada Subscriber que possui interesse no respectivo tópico. Ao publicar um dado, o Publisher deve especificar um tópico relacionado ao dado. Da mesma forma, Subscribers devem manifestar seus interesses em algum tópico. Se um cliente C1 publica uma mensagem com tópico igual a futebol e mensagem igual Jogo às 4 horas, deve ocorrer o matching entre todos os subscribers que realizaram alguma subscrição no tópico futebol, sendo gerado um matching para cada Subscriber. É importante observar que um Subscriber NÃO pode gerar uma subscrição para um tópico que já encontra-se inscrito. Um mesmo Publisher pode publicar várias mensagens no mesmo tópico. A ordem das publicações e das subscrições não interfere na verificação do matching. Caso um cliente C1 realize uma publicação P1, uma publicação P2 e uma subscrição S1, respectivamente, o resultado

esperado para o matching não será alterado caso um mesmo cliente C1 realize uma Publicação P2, uma subscrição S1 e uma Publicação P1, respectivamente. O programa testador deverá ser capaz de ler as instruções do arquivo texto de entrada e realizar as devidas operações no Sistema Publish/Subscribe. O seu programa testador deverá ler os dados de entrada a partir de um arquivo, cujo nome é passado como parâmetro na linha de comando (faz parte do trabalho descobrir como manipular arquivos e strings em C). Exemplo de execução do programa a partir da linha de comando: simulador entrada.txt O arquivo de entrada é basicamente uma lista de comandos (um por linha) em formato texto. O último comando é a palavra FIM, que indica o final do arquivo. O formato a ser usado é exemplificado abaixo: Exemplo de arquivo de entrada CRIABROKER brokera CRIABROKER brokerb CRIABROKER brokerc CRIABROKER brokerd CRIABROKER brokere CRIABROKER brokerf CRIABROKER brokerg CRIACLIENTE cliente1 P brokera CRIACLIENTE cliente2 S brokera CRIACLIENTE cliente3 S brokerb CRIACLIENTE cliente4 P brokerc CRIACLIENTE cliente5 S brokerc CRIACLIENTE cliente6 P brokerd CRIACLIENTE cliente7 S brokerg INSEREVIZINHO brokera brokerb INSEREVIZINHO brokerb brokerc INSEREVIZINHO brokerd brokere INSEREVIZINHO brokere brokerd INSEREVIZINHO brokere brokerf INSERE brokerd INSERE brokerg PUBLICA 1 cliente1 esporte Flamengo SUBSCREVE 2 cliente3 esporte SUBSCREVE 3 cliente5 esporte SUBSCREVE 4 cliente7 esporte SUBSCREVE 5 cliente 7 informatica PUBLICA 6 cliente6 informatica prova PUBLICA 7 cliente4 esporte Vasco IMPRIMEREDE

VERIFICAMATCHING CANCELAVIZINHO brokera brokerb INSEREVIZINHO broker A brokerc EXCLUISUBSCRICAO 2 EXCLUIBROKER brokerc EXCLUICLIENTE cliente1 IMPRIMEREDE VERIFICAMATCHING FIM Especificação dos Comandos CRIABROKER <nome_broker>: cria um broker com o nome especificado; CRIACLIENTE <nome_cliente> <tipo_cliente> <nome_broker>: cria um cliente com o nome especificado, informando qual o seu tipo (P = Publisher, S = Subscriber) e insere o cliente na lista de clientes do broker especificado; INSEREVIZINHO <broker1> <broker2>: Insere o Broker 2 na lista de vizinhos do Broker 1; IMPRIMEREDE: Lista todos os Brokers, os clientes de cada broker e suas atividades (publicações e subscrições); VERIFICAMATCHING: Lista todos os subscribers (mesmo os que não possuem matching), um por vez, e todas as duplas de subscrição e publicação, uma dupla por linha, onde ocorre o matching. As duplas devem apresentar a letra S concatenada com o identificador da subscrição, seguido de espaço e a letra P concatenada com o identificado da publicação. Logo após deve constar o tópico e mensagem da publicação, necessariamente nessa ordem, separados por espaço simples; PUBLICA <id_publicação> <nome_cliente> <tópico> <mensagem>: recebe um identificador único para a publicação, o nome cliente que deseja publicar, o tópico para o qual deseja publicar e uma mensagem que o Subscriber deve receber caso manifeste seu interesse no mesmo tópico; SUBSCREVE <id_subscrição> <nome_cliente> <tópico>: recebe um identificador único para a subscrição, o nome cliente que deseja subscrever e o tópico no qual deseja manifestar seu interesse; EXCLUISUBSCRICAO <id_subscrição>: exclui a subscrição com ID indicado; EXCLUIBROKER <nome_broker>: exclui o broker com nome indicado. Se um broker é excluído, todos os seus clientes devem ser excluídos automaticamente; EXCLUICLIENTE <nome_cliente>: exclui o cliente com nome indicado;

Dica Ao percorrer as listas de vizinhos, cuidado para não entrar em um loop infinito. Observe que na entrada usada como exemplo, o brokerd é vizinho do brokere, que por sua vez é vizinho do brokerf. Porém, o broker F é também vizinho do brokerd, criando um ciclo infinito; Não esqueça de liberar toda memória alocada ao término da execução do programa!!! Considerando o arquivo de entrada acima, espera-se o seguinte no arquivo de saída: Arquivo de saída para o arquivo entrada.txt IMPRIMEREDE BROKER brokera VIZINHO brokerb CLIENTE P cliente1 EVENTO P1 esporte Flamengo CLIENTE S cliente2 BROKER brokerb VIZINHO brokera VIZINHO brokerc CLIENTE S cliente3 EVENTO S2 esporte BROKER brokerc VIZINHO brokerb CLIENTE P cliente4 EVENTO P7 esporte Vasco CLIENTE S cliente5 EVENTO S3 esporte BROKER brokerd VIZINHO brokere CLIENTE P cliente6 EVENTO P6 informatica prova BROKER broker E VIZINHO brokerd BROKER brokerf VIZINHO brokere

VIZINHO brokerd VIZINHO brokerg BROKER brokerg CLIENTE S cliente7 EVENTO S4 esporte EVENTO S5 informatica VERIFICACAO MATCHING CLIENTE cliente2 CLIENTE cliente3 S2 P1 esporte Flamengo S2 P7 esporte Vasco CLIENTE cliente5 S3 P7 esporte Vasco S3 P1 esporte Flamengo CLIENTE cliente7 S5 P6 informatica prova IMPRIMEREDE BROKER brokera CLIENTE S cliente2 BROKER brokerb CLIENTE S cliente3 BROKER brokerd VIZINHO brokere CLIENTE P cliente6 EVENTO P6 informatica prova BROKER broker E VIZINHO brokerd

BROKER brokerf VIZINHO brokere VIZINHO brokerd VIZINHO brokerg BROKER brokerg CLIENTE S cliente7 EVENTO S4 esporte EVENTO S5 informatica VERIFICACAO MATCHING CLIENTE cliente2 CLIENTE cliente3 CLIENTE cliente7 S5 P6 informatica prova