mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-10 13:31:49 +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
|
[опционально] usetable: boolean=false
|
||||||
) -> nil|table|Bytearray
|
) -> nil|table|Bytearray
|
||||||
|
|
||||||
|
-- Оборачивает сокет в io_stream (см. ../io_stream.md)
|
||||||
|
socket:as_stream(
|
||||||
|
[опционально] binaryMode: boolean=true
|
||||||
|
) -> io_stream
|
||||||
|
|
||||||
-- Закрывает соединение
|
-- Закрывает соединение
|
||||||
socket:close()
|
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
|
end
|
||||||
return self:recv(length, usetable)
|
return self:recv(length, usetable)
|
||||||
end,
|
end,
|
||||||
|
as_stream=network.__as_stream,
|
||||||
close=function(self) return network.__close(self.id) end,
|
close=function(self) return network.__close(self.id) end,
|
||||||
available=function(self) return network.__available(self.id) or 0 end,
|
available=function(self) return network.__available(self.id) or 0 end,
|
||||||
is_alive=function(self) return network.__is_alive(self.id) 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"
|
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)
|
math.randomseed(time.uptime() * 1536227939)
|
||||||
|
|
||||||
rules = require "core:internal/rules"
|
rules = require "core:internal/rules"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue