Wasabi v2.3.2-beta: cliente TCP/TLS nativo, exemplos, benchmarks e suíte de testes
Há alguns dias atrás publiquei sobre o Wasabi, um módulo WebSocket/WSS nativo para VBA sem dependências externas. De lá para cá o projeto avançou bastante. A versão v2.3.2-beta já está disponível, e gostaria de compartilhar as novidades.
A principal adição é um cliente TCP nativo completo, que funciona tanto sobre TCP puro quanto sobre TLS 1.2/1.3. Ele compartilha o mesmo pool de conexões, suporte a proxy, descoberta de MTU e infraestrutura Schannel já utilizados pelo cliente WebSocket. A API é simples e direta:
Dim h As Long
' TCP puro
If TcpConnect("tcpbin.com", 4242, h) Then
TcpSendText "Olá" & vbCrLf, h
Debug.Print TcpReceiveText(h)
TcpDisconnect h
End If
' TCP com TLS
If TcpConnectTLS("exemplo.com", 443, h) Then
TcpSendText "GET / HTTP/1.0" & vbCrLf & "Host: exemplo.com" & vbCrLf & vbCrLf, h
Debug.Print TcpReceiveText(h)
TcpDisconnect h
End If
Todas as funções TCP (TcpSend, TcpSendText, TcpReceive, TcpReceiveText, TcpReceiveUntil, TcpBroadcast etc.) funcionam com proxies corporativos, autenticação NTLM/Kerberos e a mesma camada TLS das conexões wss. As funções de configuração de timeout, certificados e buffers também estão disponíveis nos handles TCP.
O repositório agora possui uma pasta de exemplos com código pronto para uso:
- Conexão WebSocket com a Binance para dados de ticker em tempo real
- Publicação e assinatura MQTT usando o Mosquitto
- Cliente TCP echo
- Requisição HTTPS pura sobre TLS
- Conexão via proxy com autenticação NTLM
Cada exemplo está documentado e testado no Office 32 e 64 bits.
Foi adicionada uma pasta de benchmarks. Ela contém rotinas VBA que medem vazão, latência e tempo de estabelecimento de conexão. São úteis para ajustes de desempenho e comparações entre ambientes.
Uma pasta de testes contém testes unitários para parsing de frames, compressão, manipulação de pacotes MQTT e outras lógicas internas. A suíte vem crescendo a cada release.
A documentação na pasta docs foi reorganizada. A referência da API está mais clara, os códigos de erro estão explicados e foi incluída uma visão geral da arquitetura.
Um exemplo rápido usando WebSocket e MQTT:
Dim h As Long
If WebSocketConnect("wss://test.mosquitto.org:8081/mqtt", h, False, True, "mqtt") Then
MqttConnect "wasabi-client", h
MqttSubscribe "sensores/temperatura", 0, h
Do While WebSocketIsConnected(h)
Dim msg As String
msg = MqttReceive(h)
If msg <> "" And Left(msg, 1) <> "[" Then
Dim partes() As String
partes = Split(msg, "|", 2)
Debug.Print partes(0), partes(1)
End If
DoEvents
Loop
MqttDisconnect h
WebSocketDisconnect h
End If
Um bug reportado pelo fafalone (crash no Office 32 bits) foi corrigido em poucas horas após o post original, e a correção já está no branch principal.
O módulo continua sendo um único arquivo .bas, sem referências, sem DLLs e sem necessidade de registro. Funciona do Windows XP ao Windows 11, em qualquer host VBA.
Github: https://github.com/uesleibros/wasabi
Release v2.3.2-beta: https://github.com/uesleibros/wasabi/releases/tag/v2.3.2-beta