	       MAC440 - Sistemas de Objetos Distribuido

			 Exercicio Programa 3

		   TCBnet - Treecast Batch Network



AUTORES:
========

Danilo Eiji Seki <dseki@linux.ime.usp.br>
Fabiana Piesigilli <fabi@linux.ime.usp.br>
Fernando Kasten Peinado <fpeinado@linux.ime.usp.br>
Rodrigo Vieira Couto <rcouto@linux.ime.usp.br>


REQUISITOS PARA EXECUCAO:
=========================

Para utilizar o  programa, e necessario ter instalado  e configurado o
ORB distribuido  pelo pacote  JacORB numa versao  igual ou  superior a
1.4beta2. E necessario tambem, ter instalado o JDK 1.3 ou superior.

Se quiserem compilar o codigo, temos duas opcoes:

* Usando   o   Jakarta-Ant   (supondo   ja  totalmente   instalado   e
configurado). Bastaria rodar 'ant lib' no diretorio raiz do pacote.

* Usando o make, fazendo-se assim necessario editar o Makefile.


MODO DE USO:
============

Para rodar o programa num  shell unix (bash, tsh, etc), basta executar
o script 'run.sh' no diretorio raiz do pacote.

Em qualquer outro lugar, basta adicionar o aruqivo 'tcbnet.jar' (com o
caminho completo) na variavel de ambiente CLASSPATH e executar:

jaco tcbnet.TCBNet


INSPIRAO E DESCRIO INICIAIS:
================================

Juntamente com o  incio da popularizao da Internet,  surgiu a idia
de  criar  canais de  contedo,  nos  quais  o usurio  seria  suprido
constantemente por  informaes de seu interesse. No  entanto, a idia
apresentava dois problemas: ia contra a vantagem principal da Internet
e era muito  caro suprir tais informaes. Quanto  ao primeiro item, o
usurio busca na Internet  uma maior interatividade, escolhendo a dedo
o que quer  assistir ou saber a qualquer momento,  ao contrrio do que
acontece  em  canais  de  televiso.   J  o  segundo  aspecto  era  a
necessidade de uma grande capacidade de transmisso de dados por parte
de um servidor centralizado. Mesmo que o trabalho fosse dividido entre
vrios servidores, o  "sacrifcio" principal ainda estaria concentrado
em poucos locais.  Todo esse cenrio resultou em  alguns poucos canais
que transmitiam pequenos trechos de  texto com notcias de ltima hora
ou  previso  do   tempo.  Definitivamente  nada  realmente  atrativo,
principalmente porque o mesmo resultado poderia ser conseguido por uma
pgina comum de Internet.

Alguns anos  depois, surge na Internet  uma tecnologia revolucionria,
chamada de peer-to-peer (P2P), na  qual os dados transitam na Internet
sem  a necessidade de  um servidor  centralizado para  transmitir cada
informao.  Mas no   que algum  se lembrou  dos antigos  canais de
contedo e  quis unir as  duas coisas? Por  qu? Como isso  resolve os
problemas citados?

Queremos criar, ao juntar as duas  idias, um PUSH de contedo P2P. Ao
contrrio das  redes de compartilhamento  de arquivos P2P  atuais, nas
quais o usurio busca em uma infinidade de possibilidades aquilo que o
interessa, nessa  rede pessoas com interesses  semelhantes enviam seus
arquivos. Pelas  caractersticas da aplicao,  serve para transmisso
de informaes que no precisem chegar em alta velocidade nem em tempo
real. Em  compensao, possui a capacidade de  transmisso de arquivos
de maior  dimenso em uma  rede onde as pessoas  esto permanentemente
conectadas ou conectadas  em um mesmo perodo sem  a necessidade de um
poderoso servidor para isso.

Com isso,  conseguimos transmitir  arquivos mais interessantes  do que
simples textos, como msica ou vdeo. Por ser mais flexvel, o push de
contedo permite  ao usurio receber  passivamente o contedo  que lhe
interessa,  seja ele  o  que for.  Por  exemplo, uma  pequena rede  de
brasileiros  fs de  seriados  antigos  de TV.  Apesar  de haver  (ter
havido)  muito material,  no   fcil de  encontrar. Ento,  com essa
rede, quando algum conseguir  alguma coisa recm-lanada ou rara, faz
um broadcast para  que todos possam compartilhar de  sua felicidade :)
Apesar de continuar contrariando o perfil interativo da Internet, como
foi  mencionado anteriormente,  uma  posio ativa  constante   muito
cansativa, sendo interessante esta opo intermediria.


VISO GERAL DO FUNCIONAMENTO:
=============================

Vamos utilizar  o exemplo  do nosso f  de seriados antigos  para esta
viso geral. Aps baixar e instalar  o programa, o usurio entra com o
endereo de um servidor central do assunto, que servir exclusivamente
para  indicar outras  pessoas  j conectadas  na  rede. Esse  endereo
poderia  ser conseguido  em  pginas na  Internet,  servios de  busca
especiais  para essas  etc. Conhecendo  alguns ns  da rede,  tenta se
conectar a algum deles, os quais, em caso de lotao, sugerem outros .
Ao  se  conectar,  o usurio  se  torna  um  n  de  uma rede  P2P  de
distribuio de mensagens.

Quando  algum envia  um arquivo  para a  rede, envia  a todos  os ns
conexos uma mensagem contendo as caractersticas do arquivo, a prpria
identificao e um tempo de vida. Os ns iro repassar essas mensagens
para  frente, a  no  ser que  o tempo  de  vida tenha  acabado ou  as
caractersticas  do arquivo  se  encaixem nos  padres definidos  pelo
usurio como interesse.   Nesse ltimo caso, o n  que iria repassar a
mensagem envia  uma nova  mensagem do mesmo  arquivo - mas  dessa vez,
colocando prpria identificao e tempo de vida.

Quando  algum  se interessa  pelo  arquivo,  se  conecta no  n  cuja
identificao estava na mensagem. E comea a baixar pacotes que compe
o arquivo  completo de interesse. Se  algum se conectar  nesse n que
est baixando os  pacotes, esse ltimo pode ir  mandando os pacotes j
recebidos,  mesmo que  o arquivo  ainda no  tenha  sido completamente
transmitido.

Conforme as  pessoas vo  se interessando pelo  mesmo arquivo,  vai se
formando uma  rede no formato de  uma rvore, separada da  rede P2P de
mensagens. Para cada  arquivo diferente que est sendo  enviado para a
rede, forma-se uma rvore dessa.