added socket:as_stream()

This commit is contained in:
Onran 2026-06-21 20:51:49 +09:00
parent bf98091a9c
commit dfd67011a4
4 changed files with 84 additions and 0 deletions

View file

@ -92,6 +92,11 @@ socket:recv_async(
[опционально] usetable: boolean=false
) -> nil|table|Bytearray
-- Оборачивает сокет в io_stream (см. ../io_stream.md)
socket:as_stream(
[опционально] binaryMode: boolean=true
) -> io_stream
-- Закрывает соединение
socket:close()

View file

@ -0,0 +1,76 @@
local io_stream = require "core:io_stream"
local lib = { }
local sockets = { }
local nextDescriptor = 0
local function openDescriptor(socket)
nextDescriptor = nextDescriptor + 1
sockets[nextDescriptor] = socket
return nextDescriptor
end
local function requireDescriptor(descriptor)
if not sockets[descriptor] then
error("unknown descriptor")
end
end
function lib.read(descriptor, length)
requireDescriptor(descriptor)
return sockets[descriptor]:recv(length)
end
function lib.write(descriptor, data)
requireDescriptor(descriptor)
sockets[descriptor]:send(data)
end
function lib.seek(descriptor, mode, offset)
error("cannot seek socket")
end
function lib.tell(descriptor)
error("cannot tell socket")
end
function lib.flush(descriptor)
requireDescriptor(descriptor)
end
function lib.available(descriptor)
requireDescriptor(descriptor)
return sockets[descriptor]:available()
end
function lib.is_alive(descriptor)
local socket = sockets[descriptor]
return socket ~= nil and socket:is_alive()
end
function lib.close(descriptor)
requireDescriptor(descriptor)
sockets[descriptor]:close()
sockets[descriptor] = nil
end
return function(socket, binaryMode)
if binaryMode == nil then
binaryMode = true
end
return io_stream.new(
openDescriptor(socket),
binaryMode,
lib
)
end

View file

@ -49,6 +49,7 @@ local Socket = {__index={
end
return self:recv(length, usetable)
end,
as_stream=network.__as_stream,
close=function(self) return network.__close(self.id) end,
available=function(self) return network.__available(self.id) or 0 end,
is_alive=function(self) return network.__is_alive(self.id) end,

View file

@ -334,6 +334,8 @@ end
require("core:io_stream").wrap_bytearray = require "core:internal/stream_providers/bytearray"
network.__as_stream = require "core:internal/stream_providers/socket"
math.randomseed(time.uptime() * 1536227939)
rules = require "core:internal/rules"