Recentemente passei por uma situação interessante, isso porque há muito tempo não programava Win Forms, e por uma determinada questão do projeto, necessitava saber se em determinado instante o sistema estava ou não conectado à Internet. Para a maioria dos desenvolvimentos de soluções Web, esse pequeno detalhe nem é levado em conta, mas em uma aplicação Win que é executado localmente, nesse meu caso, era interessante saber.
GeneXus oferece um tipo bem interessante que é o
HttpClient que permite obter o resultado de uma chamada a uma URL qualquer na Web. No exemplo programado temos uma chamada ao
google.com, e a resposta pode ser tratada pela leitura do valor de
ErrCode. O resultado de
ErrCode = 0 significa que não houveram erros.
&HttpClient.Execute("GET", http://www.google.com)
&itsconnected = iif(&HttpClient.ErrCode=0,1,0)
Ao terminar a chamada a variável
&itsconnected receberá o valor 1 para o caso de haver conexão, e zero para não.
Esse código bastante enxuto pode ser traduzido em C#, e usando o recurso de programação nativa do GeneXus, poderiamos escrever algo como:
csharp System.Net.HttpWebRequest req;
csharp System.Net.HttpWebResponse resp;
csharp try {
csharp string url = @"http:"+"/"+"/"+"www.google.com/";
csharp req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
csharp resp = (System.Net.HttpWebResponse)req.GetResponse();
csharp if(resp.StatusCode.ToString().Equals("OK")) {
csharp [!&itsconnected!] = 1;
csharp }
csharp else {
csharp [!&itsconnected!] = 0;
csharp }
csharp } catch(Exception exc) {
csharp [!&itsconnected!] = 0;
csharp }
Observe a grafia para se fornecer o endereço
http://www.google.com, no código nativo, isso devido ao problema de
newline in constant gerado pelo compilador C#.
Veja que GeneXus suporta os dois modelos de programação, mas se compararmos, fica nítido o quanto GeneXus de fato nos facilita a vida, não é?