mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
added socket:as_stream()
This commit is contained in:
parent
bf98091a9c
commit
dfd67011a4
4 changed files with 84 additions and 0 deletions
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
76
res/modules/internal/stream_providers/socket.lua
Normal file
76
res/modules/internal/stream_providers/socket.lua
Normal 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
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue