mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
78 lines
2.3 KiB
Lua
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()
|