CHAT
Uma duvida, enquanto pesquisava sobre WebAPI e seu desenvolvimento, encontrei alguns conteudos sobre WebService, apesar de ser muito mais pesado e lento, foi o que encontrei com uma gama forte com VB.NET, no meu caso que é um chat simples e barato, sem muita frescura, só envio e recebimento de texto. O melhor é o WebAPI mesmo? Como muitos amigos meus sabem, tenho mais afinidade em desenvolver VB.NET do que qualquer outra linguagem. Levo muito mais tempo para entender por exemplo um sistema JAVA e C# do que um em VB.NET. Eu vou estar ainda desenvolvendo em WebAPI, mas se eu desenvolver em WebService terei uma performance aproximado? Já que o sistema não exige tanto da conexão, vai ter um sistema no PC1 e no PC2, ambos conectados na Web, terá um usuário e senha e envios de textos e mais textos. Tanto o WebService e WebAPI terei o mesmo resultado com performance diferente, com velocidades um pouco diferenciado, Pergunto pois creio que chat quase ninguem usa, até o Whatsapp já está ficando deixado de lado por alguns. Minha ideia não é comercializar o meu sisteminha de chat, mas desenvolver para amigos.
- Abra a tampa
- Coloque a roupa dentro da máquina
- Coloque o sabão
- Aperte o botão
Para você é uma série de instruções para iniciar a lavagem de roupa e deve ser o mesmo que:
- Desloque a abertura do compartimento de lavagem
- Introduza no cesto de lavagem todo o conteúdo à ser limpo
- Disponha a substância limpante no compartimento superior
- Inicialize o procedimento
São a mesma série de instruções, de formas diferentes, ambas descrevendo o processo para iniciar lavagem de roupa. Para você, ambos devem ser a mesma coisa. Esse é o maior segredo. Não veja código, veja o que ele faz, ao menos tente ter uma idéia do que ele faz. é isso que me refiro quando falo em entender conceitos. Quando você entender isso, um oceano vai se abrir em sua mente. Quer ver o que estou falando? Veja isso, são todos o mesmo código, em diversas linguagens, todos fazem a mesma coisa.
(Isto deve ser VB.Net)
- Desloque a abertura do compartimento de lavagem
- Introduza no cesto de lavagem todo o conteúdo à ser limpo
- Disponha a substância limpante no compartimento superior
- Inicialize o procedimento
(Isto deve ser C#)
- Abra a tampa;
- Coloque a roupa dentro da máquina;
- Coloque o sabão;
- Aperte o botão;
Caro Mouser, não me lembro a sua idade, mas com certeza é bem mais novo do que eu. Concordo com o Kerplunk de que a linguagem pouco importa. Eu também tive esse pensamento por muito tempo, me limitando apenas a dizer: [Ô]C# é muito difÃcil, eu nunca vou conseguir aprender essa linguagem[Ô]. Hoje vejo que estava totalmente errado. Depois que comecei a converter um sistema todo feito em VB.Net para C#, foi que vi que a diferença está apenas na sintaxe, mas isso a gente vai [Ô]decorando[Ô] à medida que vai introduzindo os códigos. Comecei nessa área de programação com meus 19-20 anos, hoje tenho quase 48. Estou aprendendo agora o conceito de OOP, Reflection, estou ainda engatinhando nesse caminho, mas não desisto, não. Vou em frente, enquanto ainda me resta esperança. Também estou tentando fazer um sisteminha de Chat, mas para usar somente interno na empresa. Aproveitando uma idéia bem antiga do nosso querido Marcelo-Treze que eu vi uma vez. Se eu conseguir terminar, prometo que vou postar aqui no Fórum para quem quiser ver.
Segue abaixo alguns links que pesquisei:
Citação:
https://msdn.microsoft.com/pt-br/library/dn450975.aspx
http://csharpbrasil.com.br/criando-e-consumindo-web-api-parte-1/
https://www.youtube.com/watch?v=MeiZFLijwWs
http://www.vitormeriat.com.br/2013/09/20/asp-net-web-api-criando-e-consumindo-dados-parte-1/
http://eduardopires.net.br/2013/07/asp-net-web-api-meu-primeiro-servico-rest/
http://www.ciceroednilson.com.br/criando-um-servico-restful-com-web-api-em-c/
http://elemarjr.net/2012/05/21/usando-asp-net-web-api-httpclient-para-consumir-servios-rest/
http://waldyrfelix.net/2012/11/01/asp-net-webapi-basic-authentication/
Código fonte disponÃvel. Pra ver como estamos atrasados, foi publicado em 2012, quatro anos atrás e já nem era considerado novidade.
Citação:
Public Class Mensagem
{
public string username {get;set;}
public string text {get;set;}
public string dt {get;set;}
}
Vb.Net
Citação:
Public Class Mensagem
Public Property username() As String
Get
Return m_username
End Get
Set
m_username = Value
End Set
End Property
Private m_username As String
Public Property text() As String
Get
Return m_text
End Get
Set
m_text = Value
End Set
End Property
Private m_text As String
Public Property dt() As String
Get
Return m_dt
End Get
Set
m_dt = Value
End Set
End Property
Private m_dt As String
End Class
C#
Citação:
public class ChatController : ApiController
{
public HttpResponseMessage Get(HttpRequestMessage request)
{
HttpResponseMessage response = request.CreateResponse();
response.Content = new PushStreamContent(OnStreamAvailable, [Ô]text/event-stream[Ô]);
return response;
}
public void Post(Message m)
{
m.dt = DateTime.Now.ToString([Ô]MM/dd/yyyy HH:mm:ss[Ô]);
MessageCallback(m);
}
}
VB.NET
Citação:
Public Class ChatController
Inherits ApiController
Public Function [Get](request As HttpRequestMessage) As HttpResponseMessage
Dim response As HttpResponseMessage = request.CreateResponse()
response.Content = New PushStreamContent(OnStreamAvailable, [Ô]text/event-stream[Ô])
Return response
End Function
Public Sub Post(m As Message)
m.dt = DateTime.Now.ToString([Ô]MM/dd/yyyy HH:mm:ss[Ô])
MessageCallback(m)
End Sub
End Class
C#
Citação:
private static readonly ConcurrentQueue<StreamWriter> _streammessage = new ConcurrentQueue<StreamWriter>();
public static void OnStreamAvailable(Stream stream, HttpContentHeaders headers, TransportContext context)
{
StreamWriter streamwriter = new StreamWriter(stream);
_streammessage.Enqueue(streamwriter);
}
private static void MessageCallback(Message m)
{
foreach (var subscriber in _streammessage)
{
subscriber.WriteLine([Ô]data:[Ô] + JsonConvert.SerializeObject(m) + [Ô]n[Ô]);
subscriber.Flush();
}
}
VB.NET
Citação:
Private Shared ReadOnly _streammessage As New ConcurrentQueue(Of StreamWriter)()
Public Shared Sub OnStreamAvailable(stream As Stream, headers As HttpContentHeaders, context As TransportContext)
Dim streamwriter As New StreamWriter(stream)
_streammessage.Enqueue(streamwriter)
End Sub
Private Shared Sub MessageCallback(m As Message)
For Each subscriber As var In _streammessage
subscriber.WriteLine([Ô]data:[Ô] & JsonConvert.SerializeObject(m) & [Ô]n[Ô])
subscriber.Flush()
Next
End Sub
Galera, esse código, converti por blocos, hoje estarei colocando este codigo, (Como eu disse no outro tópico, meu HD externo está em manutenção, estarei salvando o código aqui, e também para os amigos estarem acompanhando o desenvolvimento).
Citação:
Public Class CHAT
Dim Mensagem as String
Public Sub Enviar()
Mensagem = Mensagem + lblUsuario.Text & [Ô]: [Ô] & txtTexto.Text & Environment.NewLine
txtMensagem.Text = Mensagem
txtTexto.Focus()
txtTexto.Text = [Ô][Ô]
End Sub
End Class
Não sei se esta certo, mas a ideia funciona off line.
Como assim Off line?
Eu executei somente esse trecho da codificação e o resultado é igual esse da imagem.
Como podem perceber, fiz pequenas alterações no Design do formulário mas para esfriar a cabeça enquanto pensava em alguma lógica que fizesse sentido. Na parte funcional, o código funcionou, mas falta conectar isso a Web.
Estou estudando ainda sobre o WebAPI para tentar conectar a variavel Mensagem com o Servidor.