- Sky
- Blueberry
- Slate
- Blackcurrant
- Watermelon
- Strawberry
- Orange
- Banana
- Apple
- Emerald
- Chocolate
- Charcoal
MinerSebas
-
Content Count
7 -
Joined
-
Last visited
Posts posted by MinerSebas
-
-
I have finally made it work with this code:
function server (index) modem.open(2001) modem.open(3001) _,_,_,port,_,signal = event.pull("modem_message") modem.close(2001) modem.close(3001) gpu.set(1,10,tostring(port)) signal = serialization.unserialize(signal) gpu.set(1,1,tostring(source).." did send: "..signal) if signal == password then ColorSet(1,0xFF6600) gpu.set(1,2,"Password accepted") modem.broadcast(port + 1,"true") gpu.set(1,11,"Answer send") while true do modem.open(port+2) _,_,_,port_1,_,signal = event.pull("modem_message") modem.open(port+2) if (port + 2) == port_1 then ColorSet(1,0x33FF00) return true end end else gpu.set(1,2,"Password is wrong") modem.broadcast(port,"false") return false end end
-
I tried to steamline my network code. This is what i wrote
function server (index) index10 = index *10 modem.open(index10 + 1) _,source,_,_,_,signal = event.pull("modem_message") modem.close(index10 + 1) signal = serialization.unserialize(signal) gpu.set(1,1,tostring(source).." did send: "..signal) if signal == password then ColorSet(1,0xFF6600) gpu.set(1,2,"Password accepted") modem.send(source,index10 + 2,"true") while true do modem.open(index10 + 3) _,source1,_,_,_,close = event.pull("modem_message") modem.close(index10 + 3) if source1 == source then ColorSet(1,0x33FF00) return true end end else gpu.set(1,2,"Password is wrong") modem.send(source,index10 + 2,"false") return false end end
In this function i want to sent the message, whether or not the password was correct, back to my source. My problem is that the CC-Programm only registers a message if i broadcast it, but not when i try to send my answer to him.
Is there another way to directly comunicate between OC and CC?
-
Thanks for the help. I will try it als fast as possible.
For the Second question:
i want my light Board to be another Color, when the door is Open. To synch it with my Client, I am not using os.sleep, but I wait for a Message in Port 2003.
The Problem in my Code is, that i have to wait for the door to close, so that i can leave the if statement. So when i want to interact with my Second pc, i have to wait, until I Know that my First door has closed.
-
I am not a expert in lua, but I think tables dont have the function (?) getn, maybe something else from computercraft.
The wiki states:
Quotehttp://ocdoc.cil.li/api:non-standard-lua-libs#table_manipulation
Table Manipulation
The original functions from the
table
library are available without alteration.The Link goes to a lua manuel.
it list the functions .concat, .insert, .pack, .remove, .sort and .unpack.
I think what you are search for is .unpack
Quotehttp://www.lua.org/manual/5.2/manual.html#6.5
table.unpack (list [, i [, j]])
Returns the elements from the given table. This function is equivalent to
return list[i], list[i+1], ···, list[j]
By default,
i
is 1 andj
is#list
.I hope this helped.
-
I have seen, that you also made a documentation for the advanced cipher from compotronics. Could it be possible that you make this for all other computronics blocks/items, that are missing inits own wiki?
-
Explenation:
Main Question: I want to write a centrel OC program, that acts as a central login for severel ComputerCraft controled Doors, similarly to this one, but on my own accord.
I achievd that only those Doors open, where I gave my password, but the problem is, that I can only do it in a specific order. First the first PC, then the second and the may use the first again.
Is there a way to make it possible to open the doors in any order?
Second minor question: I am using a light board from computertronics in my server Rack to see the status of the doors (change in color between green when idle and orange when opened). But because i am waiting for the client to tell me, that the door closed, i can't start a password request from my second pc. Is there a way to allow me to do this at the same time with one single program?
Third minor question: How do i have to right my code in the function, that the while loop makes the counting, so that I wouldn't need an additional if to break my loop.
Code:
CC-Client:
switch = peripheral.wrap("right") while true do term.clear() -- Read my password term.setCursorPos(1,1) print("Please enter Password:") input = read("*") input = textutils.serialise(input) -- Send password to server switch.transmit(2001,1,input) switch.open(2002) -- Get Answer whether or not the password was correct local _,_,_,_,message = os.pullEvent("modem_message") if message == "true" then -- If password is correct, open door rs.setAnalogOutput("left",15) sleep(2) rs.setAnalogOutput("left",0) switch.transmit(2003,1,textutils.serialise("closed")) -- Tell server that door has closed end end
OP-Server:
component = require("component") event = require("event") term = require("term") serialization = require("serialization") gpu = component.gpu modem = component.modem light = component.light_board local password = "12345" -- My test password function ColorSet (index,color) -- Set the color of the light board in the server rack if index == 1 then -- Change color of the light board on the left side while (true) do light.setColor(index,color) light.setActive(index,true) index = index +1 if (index >= 6) then break end end else -- Change color on the right side index = index +5 while (true) do light.setColor(index,color) light.setActive(index,true) index = index +1 if (index >= 11) then break end end end return true end ColorSet(1,0x33FF00) -- First initialization of lightboard ColorSet(2,0x33FF00) term.clear() -- Clear window and debug info gpu.set(1,1,"No Requests known.") gpu.set(1,4,"No Requests known.") while true do modem.open(2001) -- Get password from first computer _,source1,_,_,_,signal1 = event.pull("modem_message") modem.close(2001) signal1 = serialization.unserialize(signal1) gpu.set(1,1,"PC1 did send: "..signal1.." ") --debug info about send password if signal1 == password then ColorSet(1,0xFF6600) -- Change color of light board gpu.set(1,2,"Password accepted") -- debug info modem.broadcast(2002,"true") -- tell client to open door modem.open(2003) -- wait for closed door _,_,_,_,_,close = event.pull("modem_message") modem.close(2003) ColorSet(1,0x33FF00) -- reset light board else gpu.set(1,2,"Password is wrong") -- debug info and message that password was wrong modem.broadcast(2002,"false") end modem.open(3001)-- repetion from above to other PC (Light board not implemented in this part of the code) _,source2,_,_,_,signal2 = event.pull("modem_message") modem.close(3001) signal2 = serialization.unserialize(signal2) gpu.set(1,4,"PC2 did send: "..signal1.." ") if signal2 == password then gpu.set(1,5,"Password accepted") modem.broadcast(3002,"true") else gpu.set(1,5,"Password is wrong") modem.broadcast(3002,"false") end end
If there are any additionel question, I will try to answer them.
Asynchron communication with Multiple Computers
in Programming
Posted
Unfortunely qou miss understude. Yes a have two door system, but it is not like a airlock. I wanted it also to be expandebele as much as i want. My problem was that i waitet the first PC to ask at server. Meaning that i could only work with my second pc if the first one was activated and finished. With this current code iteration I could circumvent all my problems:
In this code i leave all my ports open all the time. The last number of every port says which topic it is for. My server recieves at port ???1 the password, at ???2 it send wheter or not the password was correct, and port ???3 is wheter the door closes. The literative Port are planned to be for maintence and to register at server.