Boa tarde.
> *link do repositorio
https://github.com/denisdemaisbr/internet_check*
>
> tem o fonte, executavel e um exemplo usando io.popen()
> retorna a string online/offline
Se me permite, gostaria de adicionar uma sugestão em cima dessa ideia.
Mantendo essa premissa de que a máquina onde o programa executará de
fato esteja rodando Windows, e que enviar um programa escrito em C
pré-compilado seja uma opção viável para o colega, poderíamos no lugar
de criar um programa executável e chamar via io.popen, usar a própria
API C de Lua para criar uma biblioteca compartilhada (uma DLL, no
contexto de Windows).
Ao colocar essa DLL (que no exemplo abaixo estou chamando de vinetlib)
no diretório CPATH (bibliotecas C de Lua) da máquina de destino, o
programa Lua estará habilitado a fazer o seguinte:
-- INICIO
vinetlib = require "vinetlib"
print(vinetlib.vinet()) --> true ou false
-- FIM
Ou seja, uma simples função chamada no programa Lua que retorna true
caso conectado e false, caso contrário. O código para gerar essa DLL
pode ser observado a seguir (pegando as ideias do exemplo que
apresentou no repositório do github):
/* INICIO */
#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#define VC_EXTRALEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wininet.h>
#include "lua.h"
#include "lauxlib.h"
static int vinet(lua_State *L)
{
DWORD flags;
int rc;
BOOL isConnected;
isConnected = InternetGetConnectedState(&flags, 0);
rc = (isConnected) ? 1 : 0;
lua_pushboolean(L, rc);
return 1;
}
static const struct luaL_Reg vinetlib[] = {
{ "vinet", vinet },
{ NULL, NULL }
};
int luaopen_vinetlib(lua_State *L)
{
luaL_newlib(L, vinetlib);
return 1;
}
/* FIM */
Ou seja, basicamente incluí os cabeçalhos lua.h e lauxlib.h de Lua e
substituí a função main pela função vinet (verifica internet), que usa
a pilha virtual para guardar um booleano retornado, e depois cadastrar
essa função vinet usando o registro vinetlib.
A instrução de compilação fica a encargo do usuário, pois dependerá do
compilador que escolher utilizar. Parti da premissa de que a importação
das bibliotecas Lua seriam relativas, mas se possuir Lua no sistema,
poderá fazer absoluto também, fica a critério.