2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 07:19 PM
                Spoiler
<br>shell.run("clear")<br>print("computer id is: "..os.getComputerID())<br>write("modem direction: ")<br>side=read()<br>rednet.open(side)<br>write("server id: ")<br>server=tonumber(read())<br>while true do<br>&nbsp;&nbsp;id,data=rednet.receive()<br>&nbsp;&nbsp;print("received '"..data.."' from id: '"..id.."' correct id: '"..server.."'")<br>&nbsp;&nbsp;if id == server then<br>&nbsp;&nbsp;&nbsp;&nbsp;print("executing")<br>send=assert(loadstring(data))()<br>print("returning: '"..send.."'")<br>rednet.send(server,send)<br>&nbsp;&nbsp;end<br>end
<br>what am i doing wrong?<br><br>i can get the client to run lua commands via the lua command rednet.broadcast("turtle.forward()") but it will always send back nil for some reason<br>i managed to get it error free once but i started messing around with it after it kept returning nil<br>error is: "client:16: attempt to concatenate nil and string"new problem, how do i make it so it wont exit on a lua error, instead make it return the error as a string
 
                
             
         
        
        
            
            
                
                    
                
                1604 posts
                
             
            
                Posted 11 May 2012 - 07:36 PM
                I don't see any error in that code, so it might be the received code what's wrong. What are you sending from the server?
Do you get any error? if you do, what is it?
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 07:43 PM
                updated OP
                
             
         
        
        
            
            
                
                    
                
                14 posts
                
             
            
                Posted 11 May 2012 - 07:48 PM
                I get an error on the 13 line, "=" expected
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 07:52 PM
                I get an error on the 13 line, "=" expected
i dont
 
                
             
         
        
        
            
            
                
                    
                
                1604 posts
                
             
            
                Posted 11 May 2012 - 07:53 PM
                There's no error, just that you aren't doing a return in the function (the loaded function). You can add the return on the server or the client, depending on what's the purpose of this. On the client side you can add it by concatenating "return " with the received data:
data = "return "..data
but it won't work if you send more complex code, so it's better to do it on the server (just send "return turtle.forward").
 
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 07:54 PM
                facepalm, forgot that it loads the string as an actual function and dosent just make a new command
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 07:57 PM
                -snip-
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 08:01 PM
                new problem
                
             
         
        
        
            
            
                
                    
                
                1604 posts
                
             
            
                Posted 11 May 2012 - 08:03 PM
                Use pcall:
local func, err = loadstring(data)
if func then
  local ok, err = pcall(func)
  if not ok then
	print("Error: "..err)
  end
else
  print("Error loading function: "..err)
end
 
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 11 May 2012 - 08:41 PM
                finished code:
– by infinikiller64 aka abc on computercraft.info
– you can use this code without permission and do not have to give credit
shell.run("clear") print("computer id is: "..os.getComputerID()) write("modem direction: ") rednet.open(read())  write("server id: ") server=tonumber(read()) function run(string) local func, err = loadstring(string) if func then local ok, err = pcall(func) if not ok then return "Error: "..err end return err else return "Error loading function: "..err end end while true do id,data=rednet.receive() print("received '"..data.."' from id: '"..id.."' correct id: '"..server.."'") if id == server then print("executing") send=tostring(run(data)) print("returning: '"..send.."'") rednet.send(server,send) end end
EDIT: lol forgot to add rednet.open(side), its fixed now
                
             
         
        
        
            
            
                
                    
                
                8543 posts
                
             
            
                Posted 12 May 2012 - 04:49 PM
                So, what's it supposed to do?  Appears to load an arbitrary string it gets from another computer and send the results back.
                
             
         
        
        
            
            
                
                    
                
                2217 posts
                
                    
                        Location
                        3232235883
                    
                
             
            
                Posted 14 May 2012 - 12:07 AM
                yes :P/>/>
im still working on it too, here is my current version
client:
Spoiler
-- by infinikiller64 aka abc on computercraft.info
-- you can use this code without permission and do not have to give credit
shell.run("clear")
print("computer id is: "..os.getComputerID())
write("modem direction: ") side=read()
rednet.open(side)
write("server id: ")
s=read()
if s == "?" then
  broadcast=true
  server=nil
else
  broadcast=false
  server=tonumber(s)
end
function run(string)
  local func,err= loadstring(string)
  if func then
	local ok,err=pcall(func)
	if not ok then
return "Error: "..err
end
return err
  else
	return "Error loading function: "..err
  end
end
while true do
  id,data=rednet.receive()
  print("received '"..tostring(data).."' from id: '"..tostring(id).."' correct id: '"..tostring(server).."'")
  if id == server or broadcast == true then
	print("executing")
	send=tostring(run(data))
	print("returning: '"..send.."'")
if broadcast == false then
	  rednet.send(server,send)
else
rednet.broadcast(send)
end
  end
end
server:
Spoiler
-- by infinikiller64 aka abc on computercraft.info
-- you can use this code without permission and do not have to give credit
shell.run("clear")
print("computer id is: "..os.getComputerID())
write("modem direction: ")
rednet.open(read())
write("client id: ")
client=read()
if client=="?" then
  broadcast=true
else
  broadcast=false
  client=tonumber(client)
end
local tCommandHistory={}
while true do
  write("> ")
  local s = read(nil,tCommandHistory )
  table.insert(tCommandHistory,s)
  if broadcast==false then
	rednet.send(client,s)
  else
	rednet.broadcast(s)
  end
  corectid=0
  while corectid == 0 do
	corectid=1
	id,data=rednet.receive()
	if id ~= client and id ~= nil and broadcast == false then
	  corectid=0
	end
  end
  print(tostring(data))
end
you can enter "?" if you want to go to broadcast mode and it has a command history too!