1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/sv_socket.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

78 lines
2.3 KiB
Lua

require("bromsock")
if server then server:Close() end
server = BromSock()
server:SetOption(0xFFFF, 0x0008, 1)
server:SetOption(0x6, 0x0001 , 1)
if (not server:Listen(1337)) then
print("[BS:S] Failed to listen!")
else
print("[BS:S] Server listening...")
end
server:SetCallbackConnect(function(sockObj, succ, ip, port )
print(sockObj, succ, ip, port )
end)
local opened = {}
concommand.Add("test_command_send",function(_,_,args)
local sock = opened[tonumber(args[1])]
if not sock then return end
local packet = BromPacket()
packet:WriteStringRaw(args[2])
sock:Send(packet,true)
end)
concommand.Add("test_command_sendtest",function(_,_,args)
local sock = opened[tonumber(args[1])]
if not sock then return end
local packet = BromPacket()
packet:WriteByte(0x00)
packet:WriteUInt(1234)
packet:WriteStringNT("test")
sock:Send(packet,true)
end)
server:SetCallbackAccept(function(serversock, clientsock)
print("[BS:S] Accepted:", serversock, clientsock,clientsock:GetPort())
opened[clientsock:GetPort()] = clientsock
clientsock:SetCallbackReceive(function(sock, packet)
print("[BS:S] Received:", sock, packet)
local typ = packet:ReadByte()
print("[BS:S] Type:", typ)
if typ == 0x01 then
local trains = {}
for k,ent in pairs(ents.GetAll()) do
if ent.Base == "gmod_subway_base" and not ent.NoTrain then
table.insert(trains,ent)
end
end
local packet = BromPacket()
packet:WriteByte(0x00)
packet:WriteUInt(#trains)
sock:Send(packet,true)
for k,v in ipairs(trains) do
print("Send train",v:GetClass())
local packet = BromPacket()
packet:WriteByte(0x01)
packet:WriteUInt(#trains)
packet:WriteUInt(v:EntIndex())
packet:WriteStringNT(v:GetClass())
sock:Send(packet,true)
end
end
end)
clientsock:SetCallbackDisconnect(function(sock)
print("[BS:S] Disconnected:", sock)
opened[clientsock:GetPort()] = nil
end)
clientsock:SetTimeout(1000)
clientsock:Receive()
-- Who's next in line?
serversock:Accept()
end)
server:Accept()