
Anterior: A API do ALua 6.0 |
Próximo: |
Cria novos canais do tipo especificado.
Esta função serve de interface para a criação de vários tipos diferentes de canais. A criação de cada tipo de canal tem o seu retorno específico. Como os canais podem ter características diferentes, as funções exportadas podem ter algumas variações.
type é uma string contendo a descrição do tipo de canal a ser criado. Se o tipo de canal necessita de parâmetros auxiliares, estes fornecidos através de config. Os tratadores de eventos são passados na tabela handlers.
Consulte a documentação do tipo de canal desejado para detalhes sobre a criação e uso dos mesmos.
Cria um canal servidor TCP.
Cria um servidor TCP que pode receber conexões de clientes. O parâmetro type deve conter a string "tcp:server" e o parametro config deve ser uma tabela com chave e valor descritos a seguir:
Chave |
Valor |
Tipo |
| addr | Contém o endereço IP onde o servidor será instalado. |
string |
| port | Contém a porta em que o servidor esperará por novos clientes. | inteiro |
Um canal servidor TCP dispara os eventos de (i) nova conexão de cliente e (ii) fechamento de conexão. Tratadores podem ser instalados para receber esses eventos. A tabela a seguir mostra o nome do evento, descrição e a assinatura da função que pode ser definida para tratar o evento.
Evento |
Descrição |
Tratador |
| accept | Indica que um novos cliente realizou conexão. |
function (newclient, server) |
| close | Indica que o canal foi manualmente fechado. | function (server) |
Em geral, o evento accept é utilizado para configurar os tratadores para o novo cliente e close para liberação de recursos.
A tabela handlers pode ser informada no ato da criação do canal para instalar os tratadores para o servidor. handlers possui como chave o nome do evento e como valor a função de tratamento. Este parâmetro é opcional, e a instalação e modificação dos tratadores pode ser feita usando funções específicas sobre o canal. E não é obrigatória a instalação de tratadores para todos os eventos.
O parâmetro newclient recebido pelo tratador do evento accept é um canal cliente TCP que representa a nova conexão recebida. O parâmetro server recebido pelos tratadores de accept e close é o próprio canal servidor TCP.
Retorna um identificador para o canal servidor TCP.
require("alua")
local clients = 0
------
--- Tratadores do cliente
--
local function clt_read(conn)
local str, err = conn:receive("*l")
if str then
print(str)
elseif err == "closed" then
conn:close()
end
end
local function clt_close(conn)
clients = clients - 1
print(clients .. " cliente(s) conectado(s)")
end
------
--- Tratadores do servidor
--
local function srv_accept(clt, srv)
clients = clients + 1
print(clients .. " cliente(s) conectado(s)")
-- Set the handler for the new client connection
clt:sethandler("read", clt_read)
clt:sethandler("close", clt_close)
end
local srv_handlers = {
accept = srv_accept,
}
-- Cria o canal servidor
local config = {addr = "127.0.0.1", port = 6080}
local srv, err = alua.channel.create("tcp:server", config, srv_handlers)
assert(srv, err)
print("Servidor iniciado...")
alua.loop()
Cria um canal client TCP.
Cria um client TCP que se conecta com um servidor TCP. O parâmetro type deve conter a string "tcp:client" e o parametro config deve ser uma tabela com chave e valor descritos a seguir:
Chave |
Valor |
Tipo |
| addr | Contém o endereço IP do servidor. |
string |
| port | Contém a porta em que o servidor espera conexão. | inteiro |
Um canal cliente TCP dispara os eventos de (i) pronto para a escrita, indicando que chamadas da função de envio de dados não bloqueará o processo, (ii) pronto para a leitura, indicando há dados para serem lidos da rede e (iii) fechamento de conexão. Tratadores podem ser instalados para receber esses eventos. A tabela a seguir mostra o nome do evento, descrição e a assinatura da função que pode ser definida para tratar o evento.
Evento |
Descrição |
Tratador |
| write | Indicando que o canal está pronto para envio de dados. |
function (client) |
| read | Indica que há dados disponíveis no canal. | function (client) |
| close | A conexão foi fechada manualmente. | function (client) |
A tabela handlers pode ser informada no ato da criação do canal para instalar os tratadores para o servidor. handlers possui como chave o nome do evento e como valor a função de tratamento. Este parâmetro é opcional, e a instalação e modificação dos tratadores pode ser feita usando funções específicas sobre o canal. E não é obrigatória a instalação de tratadores para todos os eventos.
O parâmetro client recebido pelos tratadores é o próprio canal cliente TCP.
Retorna um identificador para o canal cliente TCP.
require("alua")
-- Cria o canal cliente
local config = {addr = "127.0.0.1", port = 6080}
local clt, err = alua.channel.create("tcp:client", config)
assert(clt, err)
-- Cria um temporizador para enviar as mensagens
function send()
clt:send("uma linha de texto\n")
end
local t, err = alua.timer.create(3, send)
assert(t, err)
alua.loop()
Fecha o canal servidor TCP.
Esta função fecha a conexão TCP do servidor, impedindo que novas conexões clientes sejam recebidas. Ela também modifica o valor do atributo server.type para true, indicando que o canal está fechado.
Indica se o canal está fechado.
Após o fechamento do canal através da função server:close, este campo possui valor true. Caso contrário, seu valor é nil.
Retorna o tratador de evento do canal servidor TCP.
Esta função permite recuperar o tratador dos eventos lançados pelo servidor. O argumento name é o nome do evento desejado.
Retorna a função tratadora do evento, se houver. Caso contrário, retorna nil.
Modifica o tratador de um evento do canal servidor TCP.
A função func será considerada o novo tratador para o evento name. Se func for nil, então o evento antigo é removido e o evento permanece sem tratador.
Modifica o tratador de um evento do canal servidor TCP.
A função func será considerada o novo tratador para o evento name. Se func for nil, então o evento antigo é removido e o evento permanece sem tratador.
Informação sobre o tipo de canal.
Contém a string "tcp:server" indicando o tipo do canal.
Fecha o canal cliente TCP.
Esta função fecha a conexão e modifica o campo client.closed para true.
Indica se o canal está fechado.
Após o fechamento do canal através da função client:close, este campo possui o valor true. Caso contrário, seu valor é nil.
Retorna o tratador de evento do canal cliente TCP.
Esta função permite recuperar o tratador dos eventos lançados pelo cliente. O argumento name é o nome do evento desejado.
Retorna a função tratadora do evento, se houver. Caso contrário, retorna nil.
Recebe informações do canal cliente TCP.
Esta função recebe dados do canal e pode opcionalmente o argumento pattern que é um padrão para o recebimento desses dados. Os padrões suportados são:
Caso nenhum padrão seja informado, é assumido o padão '*l' para leitura de linha.
Em caso de sucesso, retorna os dados de acordo com o padrão escolhido. Se um erro ocorrer, a função retorna o valor nil, seguido de uma mensagem de erro.
Envia informações pelo canal cliente TCP.
data deve ser uma string contendo os dados a serem enviados.
Em caso de sucesso, retorna o número de bytes enviados pelo canal. Se um erro ocorrer, a função retorna o valor nil, seguido de uma mensagem de erro.
Modifica o tratador de um evento do canal cliente TCP.
A função func será considerada o novo tratador para o evento name. Se func for nil, então o evento antigo é removido e o evento permanece sem tratador.
Altera o tempo máximo de espera para que o envio e o recebimento de dados seja terminado.
Por padrão, as funções client:send e client:receive do canal são bloqueantes. client:settimeout modifica o limite de tempo que essas funções esperam até a operação ser completada.
O parâmetro value indica o tempo máximo de espera (em segundos - use números decimais para milisegundos, por exemplo). Sendo que esse tempo pode ser aplicado nos modos (definidos pelo argumento mode):
Para cancelar o tempo de máximo de espera, passe o valor nil ou um número negativo como argumento value, tornando as operações bloqueantes novamente.
Informação sobre o tipo de canal.
Contém a string "tcp:client" indicando o tipo do canal.
Última atualização: 20-Mai-2008 16:31