+ Reply to Thread
Page 1 of 2 12 LastLast
Results 1 to 10 of 11

Thread: Sending data from Server to client in a efficent way.

  1. #1
    Wiremod Helper Donkie's Avatar
    Join Date
    May 2008
    Location
    Sweden
    Posts
    1,659

    Default Sending data from Server to client in a efficent way.

    I need to send some data from the server to the client in a efficent way. The way im having right now is putting global variables on a entity i spawn at server start. I then get those variables at the client code. I have found this is very unefficent and bad but i really dont know any else way.

    To the top of the cake, i need to color code it in a special way otherwise it gives me crappy errors that i cant remember:
    server code:
    Code:
    function Init_TriggerLogic()
    	Failent = ents.Create("prop_physics")
    		Failent:SetModel("models/props_junk/PopCan01a.mdl")
    		Failent:SetColor(143,210,85,123)
    		Failent:SetPos(Vector(0,0,0))
    		Failent:SetName("John")
    		Failent:Spawn()
    		
    	
    	timer.Create("taim bitch",1,1,function()
    		Names = file.Read("Teleportlist/Names/"..game.GetMap()..".txt")
    		Positions = file.Read("Teleportlist/Positions/"..game.GetMap()..".txt")
    		Owners = file.Read("Teleportlist/Owners/"..game.GetMap()..".txt")
    		
    		
    		
    		Failent:SetNWString("Globalnames",Names)
    		Failent:SetNWString("Globalpositions",Positions)
    		Failent:SetNWString("Globalowners",Owners)
    	end)
    end
    hook.Add( "InitPostEntity", "MapStartTrigger", Init_TriggerLogic )
    client code:
    Code:
    -- Lots of shit just to find that goddamn can -.-
    	Failenttbl = ents.FindByClass("prop_physics")
    	if Failent == nil then
    		for k, v in pairs( Failenttbl ) do
    			local r,g,b,a = v:GetColor()
    			local str=""..r..g..b..a
    			if str=="14321085123" then
    				Failent = v
    				break
    			end
    		end
    	end
    	-- End
    	
    	FakeGlobalnames = Failent:GetNWString("Globalnames")
    	FakeGlobalpositions = Failent:GetNWString("Globalpositions")
    	FakeGlobalowners = Failent:GetNWString("Globalowners")
    If you dident notice, im trying to transfer data from files at the server to every client. Sorry for the bad variable names, i cant really find anything better.

    Just to say, this works perfectly, but its very unefficent.
    Get out. Seriously, do it.

  2. #2
    No u Divran's Avatar
    Join Date
    Jul 2008
    Location
    Sweden
    Posts
    4,576

    Default Re: Sending data from Server to client in a efficent way.

    Use Usermessages: User Messages - GMod Wiki
    SVN Tutorial
    My SVN:
    Code:
    http://divranspack.googlecode.com/svn/trunk/%20divranspack/
    Get dropbox and get 250 MB extra space: Dropbox

  3. #3
    Ursus maritimus Drunkie's Avatar
    Join Date
    Feb 2009
    Location
    Canada
    Posts
    5,647
    Blog Entries
    1

    Default Re: Sending data from Server to client in a efficent way.

    Quote Originally Posted by Divran View Post
    Use Usermessages: User Messages - GMod Wiki
    ^ That

  4. #4
    billywitchdoctor.com Schilcote's Avatar
    Join Date
    Jan 2009
    Location
    There.
    Posts
    2,006

    Default Re: Sending data from Server to client in a efficent way.

    I thought usermessages were laggy (or maybe it's a relative measure)...


    [19:16:47]Client "rcdraco" spawned in server
    [19:17:10]rcdraco: hamburgertime
    [19:18:04]rcdraco was killed by worldspawn
    [19:21:50]Dropped "rcdraco" from server

  5. #5
    Wire Sofaking Azrael's Avatar
    Join Date
    Aug 2007
    Posts
    1,946

    Default Re: Sending data from Server to client in a efficent way.

    Usermessages aren't perfect, but they're a lot better than networked vars and far more suited to this kinda thing.

  6. #6
    Wiremod Helper Donkie's Avatar
    Join Date
    May 2008
    Location
    Sweden
    Posts
    1,659

    Default Re: Sending data from Server to client in a efficent way.

    Think i got them working. But AFAIK, should i have 3 of them or could i bake them into one in anyway? The tutorial dont really say anything about that.
    Get out. Seriously, do it.

  7. #7
    ◕␣◕ McLovin's Avatar
    Join Date
    Sep 2008
    Location
    Batman, Turkey
    Posts
    2,331
    Blog Entries
    3

    Default Re: Sending data from Server to client in a efficent way.

    Server -> Client use usermessages. Client -> Server use concommands.
    Anticept - HP you are terrible at trolling. Always have been. Leave it up to the pros like Jat.
    Black Phoenix - Actually cunt goes into bullshit. Bullshit does not fit in cunt.
    Drunkie - Logically, Jat Goodwin must be a fist pumping guido.

  8. #8
    Wiremod Helper Donkie's Avatar
    Join Date
    May 2008
    Location
    Sweden
    Posts
    1,659

    Default Re: Sending data from Server to client in a efficent way.

    Problem.
    I got this code in my serverside:
    Code:
    function Update()
    	timer.Create("taim bitch",1,0,function()
    		Names = file.Read("Teleportlist/Names/"..game.GetMap()..".txt")
    		Positions = file.Read("Teleportlist/Positions/"..game.GetMap()..".txt")
    		Owners = file.Read("Teleportlist/Owners/"..game.GetMap()..".txt")
    		
    		local rp = RecipientFilter()     -- Grab a CRecipientFilter object
    		rp:AddAllPlayers()               -- Send to all players!
    
    		umsg.Start("Globalvars", rp)
    			umsg.String(Names.."..D.!.A"..Positions.."..D.!.A"..Owners) -- Some random crap to seperate them so i dont need 3 usermessages
    			print(Names.."..D.!.A"..Positions.."..D.!.A"..Owners)
    		umsg.End()
    	end)
    end
    (The function gets run at a init hook)
    I know it gets run couse it prints and all that.

    And this code in my clientside:
    Code:
    function Usermessages_names(um)
    	Globalvars = um.ReadString()
    end
    usermessage.Hook("Globalvars", Usermessages_names)
    This dont work for some reason and gives me:
    autorun/client/telelist.lua:21: bad argument #1 to 'ReadString' (bf_read expected, got no value)

    Line 21 is Globalvars = um.ReadString()
    Get out. Seriously, do it.

  9. #9
    billywitchdoctor.com Schilcote's Avatar
    Join Date
    Jan 2009
    Location
    There.
    Posts
    2,006

    Default Re: Sending data from Server to client in a efficent way.

    Quote Originally Posted by IamMcLovin View Post
    Server -> Client use usermessages. Client -> Server use concommands.
    What about Client -> Client?


    [19:16:47]Client "rcdraco" spawned in server
    [19:17:10]rcdraco: hamburgertime
    [19:18:04]rcdraco was killed by worldspawn
    [19:21:50]Dropped "rcdraco" from server

  10. #10
    Wirererer Free Fall's Avatar
    Join Date
    Dec 2007
    Location
    Got digitalized and now lives in his PC's RAM
    Posts
    349

    Default Re: Sending data from Server to client in a efficent way.

    Quote Originally Posted by Donkie View Post
    *Snip*
    This dont work for some reason and gives me:
    autorun/client/telelist.lua:21: bad argument #1 to 'ReadString' (bf_read expected, got no value)

    Line 21 is Globalvars = um.ReadString()
    It has to be
    Code:
    Globalvars = um:ReadString()
    as the "ReadString" function needs "self" set with the bf_read object from which you called the function. only using "." will not set "self".

    Quote Originally Posted by Schilcote View Post
    What about Client -> Client?
    Client -> Client is not supported by default afaik. You would either need to tunnel whatever you want to send over the Server or use some other solution like LuaSocket.
    Needz moar Lua

+ Reply to Thread
Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
proceed-collector
proceed-collector
proceed-collector
proceed-collector
linguistic-parrots
linguistic-parrots
linguistic-parrots
linguistic-parrots