<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://wiki.biserp.com.br/index.php?action=history&amp;feed=atom&amp;title=FWSocket</id>
	<title>FWSocket - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.biserp.com.br/index.php?action=history&amp;feed=atom&amp;title=FWSocket"/>
	<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=FWSocket&amp;action=history"/>
	<updated>2026-04-08T21:28:18Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://wiki.biserp.com.br/index.php?title=FWSocket&amp;diff=1328&amp;oldid=prev</id>
		<title>Rodrigogml: Criou página com &#039;O FWSocket é um serviço que abstrai a conexão entre dois pontos distintos através de uma conexão TCP para transferência de objetos entre sistemas. A vantagem entre outra...&#039;</title>
		<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=FWSocket&amp;diff=1328&amp;oldid=prev"/>
		<updated>2021-09-28T18:17:38Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;O FWSocket é um serviço que abstrai a conexão entre dois pontos distintos através de uma conexão TCP para transferência de objetos entre sistemas. A vantagem entre outra...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;O FWSocket é um serviço que abstrai a conexão entre dois pontos distintos através de uma conexão TCP para transferência de objetos entre sistemas. A vantagem entre outras opções já oferecidas pelas plataformas, como o servidor de aplicação, é que são apenas classes do Java e não precisam de bibliotecas externas. Assim, trata-se um sistema simples para ser anexado em projetos pequenos e portáteis, como utilitários ou para dispositivos móveis.&lt;br /&gt;
&lt;br /&gt;
== Synchronous Connection - &amp;quot;Request/Response&amp;quot; ==&lt;br /&gt;
Uma das maneiras de se estabelecer uma comunicação entre dois pontos é o modo síncrono. Neste modo o cliente abre uma conexão com o servidor, transfere os dados (como uma requisição) e aguarda pela resposta que virá em seguida. Este modo de funcionamento é similar ao funcionamento de um servidor HTTP.&lt;br /&gt;
&lt;br /&gt;
Para criar esse ambiente basta seguir os seguintes passos:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do lado servidor, crie uma instância da classe FWSocketSyncServer&amp;#039;&amp;#039;&amp;#039; - para criar esta classe são exigidos dois parâmetros, o primeiro é a porta em que o sistema aceitará conexões, o segundo é um listener que será chamado sempre que recebermos algum novo objeto através da conexão. Com a instância criada, chame o método startServer(). Provavelmente esta instância deverá ser controlada por um Singleton o outro pattern que permita que o objeto esteja disponível para toda aplicação e não apenas para a Thread corrente. Uma das razões para isso é que uma vez iniciado o servidor, a thread é liberada e as conexões serão escutadas em uma Thread a parte.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do lado cliente, crie uma instância (ou várias a medida que forem necessárias) da classe FWSocketSyncClient&amp;#039;&amp;#039;&amp;#039; - já para instanciar esta classe os argumentos necessários são: host e porta para conectar no FWSocketServer. Criada a instância, basta usar o método sendData(). Este método cria a conexão toda vez que é chamado, envia os dados e aguarda que o retorno venha do servidor.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Connection - &amp;quot;Active Full-Duplex&amp;quot; ==&lt;br /&gt;
Esta conexão é utilizada quando queremos estabelecer um canal de comunicação que pode ser iniciado por ambos os pontos (cliente ou servidor). Como por exemplo uma conexão de chat, em que o usuário pode envier mensagens quando quiser, e o servidor deve ter a capacidade de enviar as mensagens assim que precisa.&lt;br /&gt;
&lt;br /&gt;
Embora ainda tenhamos um lado Servidor - que mantém uma porta aberta para conexão - e outro Cliente - que inicia a conexão, ao contrário do método Synchronous a conexão deste método ficará aberta o tempo todo. Não será criada apenas quando tivermos dados a serem enviados. Ambas as classes enviam dados, mas não esperam resposta na hora. A resposta virá &amp;quot;em outro canal&amp;quot; e será avisada pelo Listener.&lt;br /&gt;
&lt;br /&gt;
Para estabelecer essa conexão entre dois pontos basta seguir os seguintes passos:&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Do lado servidor&amp;#039;&amp;#039;&amp;#039;, crie uma instância do FWSocketAsync e chame o método startServer(). Neste método será obrigatório passar dois parâmetros &amp;quot;port&amp;quot; que é o número da porta que o servidor passará a escutar para conexões, e &amp;quot;listener&amp;quot; que será o listener de eventos, chamado sempre que recebermos algum dado. Para encerrar o servidor basta chamar o método stopServer().&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Do lado cliente&amp;#039;&amp;#039;&amp;#039;, cria uma instância do FWSocketAsync, exatamente como no lado servidor, no entanto devemos chamar o método connect(). Esse método recebe 3 parametros: host - endereço do servidor, port - porta na qual o server está escutando, e listener - listener que será chamado quando recebermos dados do servidor.&lt;br /&gt;
&lt;br /&gt;
== Transmissão de Objetos ==&lt;br /&gt;
O conteúdo a ser transmitido deve ser colocado em uma instância do FWSocketObjectMap. Este objeto é tem a função de ser um container para os dados a serem transmitidos. Baseado em uma estrutura &amp;quot;Map&amp;quot;, permite que diversos objetos sejam colocados dentro e identificados com uma chave. Como os objetos são transmitidos através da serialização do Java, obrigatoriamente o objetos a serem transmitidos devem implementar &amp;quot;java.io.Serializable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Assim como para o funcionamento correto da desserialização todas as classes com mesma versão devem estar disponível do outro lado da conexão.&lt;br /&gt;
&lt;br /&gt;
== Propagação de Exceptions ==&lt;br /&gt;
Como as exceptions são serializáveis, caso alguma exceção ocorra durante o processamento do FWSocket, ou a chamada do listener permita que a exceção suba até o FWSocket, essa exceção será capturada e retornada para o outro lado da conexão.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No caso de conexão síncrona&amp;#039;&amp;#039;&amp;#039; - a exceção será lançada exatamente como era e poderá ser tratada como se não tivesse passado pelo FWSocket.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No caso de conexão assíncrona&amp;#039;&amp;#039;&amp;#039; - a conexão assíncrona não propaga exceptions. Qualquer exception será ignorada e não propagada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|Transporte da Exceção|Para transportar a exceção o BIS a serializa e envia na estrutura Map na propriedade descrita na constante FWSocketObjectMap.PROPERTY_EXCEPTION.}}&lt;/div&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
</feed>