SHOW:
|
|
- or go back to the newest paste.
1 | local tArgs = { ... } | |
2 | ||
3 | for k,v in pairs({"right","left","top","bottom","front","back"}) do | |
4 | if peripheral.getType(v)=="modem" then | |
5 | rednet.open(v) | |
6 | isOpen=true | |
7 | end | |
8 | end | |
9 | ||
10 | local function printUsage() | |
11 | - | rednet.open("right") |
11 | + | |
12 | print(" bluetooth receive") | |
13 | print(" bluetooth send <file> <computerID>") | |
14 | print(" bluetooth scan") | |
15 | return | |
16 | end | |
17 | ||
18 | local function scan() | |
19 | print("Scanning for Bluetooth devices...") | |
20 | rednet.broadcast("bluetooth.scan") | |
21 | local id,msg = "","" | |
22 | local foundComputers = { } | |
23 | while not msg == nil do | |
24 | local id,msg = rednet.receive() | |
25 | if msg == string.sub(msg, 1, #"bluetooth.scan.reply:") == "bluetooth.scan.reply:" then | |
26 | --foundComputers[#foundComputers + 1] = {string.sub(msg, #"bluetooth.scan.reply:" + 1), id} | |
27 | ||
28 | foundComputers[#foundComputers + 1] = id | |
29 | print("Found: " .. string.sub(msg, #"bluetooth.scan.reply:" + 1) .. " - ID: " .. tostring(id)) | |
30 | end | |
31 | end | |
32 | - | print("File can't be sent!") |
32 | + | |
33 | - | print("It is either non existant or is a directory!") |
33 | + | |
34 | ||
35 | local function sendFile(file, computerID) | |
36 | if not fs.exists(file) or fs.isDir(file) then | |
37 | print("File can't be sent.") | |
38 | print("It either does not exist or is a directory.") | |
39 | return | |
40 | end | |
41 | ||
42 | computerID = tonumber(computerID) | |
43 | ||
44 | local sr = fs.open(file, "r") | |
45 | print("Connecting to bluetooth device.") | |
46 | ||
47 | while true do | |
48 | rednet.send(computerID, "bluetooth.connect") | |
49 | os.startTimer(1) | |
50 | local e,p1,p2,p3 = os.pullEvent() | |
51 | if e == "rednet_message" then | |
52 | local id,msg = p1,p2 | |
53 | if msg == "bluetooth.accept" then | |
54 | print("Bluetooth device connected!") | |
55 | - | sleep(0.8) |
55 | + | |
56 | end | |
57 | end | |
58 | - | sleep(0.5) |
58 | + | |
59 | ||
60 | sleep(0.2) | |
61 | - | local data |
61 | + | |
62 | ||
63 | - | data = sr.readLine() |
63 | + | sleep(0.1) |
64 | - | if data == nil then |
64 | + | |
65 | print("Sending file...") | |
66 | data = sr.readAll() | |
67 | - | rednet.send(computerID, "bluetooth.file:" .. data) |
67 | + | rednet.send(computerID, "bluetooth.file:" .. data) |
68 | - | sleep(0.1) |
68 | + | sleep(0) |
69 | rednet.send(computerID, "bluetooth.done") | |
70 | print("File sent!") | |
71 | sr.close() | |
72 | end | |
73 | ||
74 | local function receiveFile() | |
75 | print("Waiting for a bluetooth connection...") | |
76 | ||
77 | while true do | |
78 | local id,msg | |
79 | local e,p1,p2,p3 = os.pullEvent() | |
80 | if e == "rednet_message" then | |
81 | id,msg = p1,p2 | |
82 | end | |
83 | if e == "key" then | |
84 | break | |
85 | end | |
86 | ||
87 | if msg == "bluetooth.scan" then | |
88 | rednet.send(id, "bluetooth.scan.reply:" .. os.getComputerLabel()) | |
89 | sleep(0) | |
90 | - | sleep(0.1) |
90 | + | |
91 | ||
92 | if msg == "bluetooth.connect" then | |
93 | print("Connected to " .. id .. ".") | |
94 | local remoteID = id | |
95 | - | print("Connected to " .. id .. "!") |
95 | + | |
96 | ||
97 | local fileName | |
98 | ||
99 | local id,msg = "","" | |
100 | while true do | |
101 | - | print("Getting the file name...") |
101 | + | |
102 | ||
103 | if id == remoteID and string.sub(msg, 1, #"bluetooth.filename:") == "bluetooth.filename:" then | |
104 | fileName = string.sub(msg, #"bluetooth.filename:" + 1) | |
105 | break | |
106 | end | |
107 | end | |
108 | ||
109 | if fs.exists(fileName) then | |
110 | print("File already exists. Overwrite existing file? (Y/N)") | |
111 | a = read() | |
112 | if a == "y" then | |
113 | fs.delete(fileName) | |
114 | - | print("File already exists! Deleting old file...") |
114 | + | else |
115 | - | fs.delete(fileName) |
115 | + | return |
116 | end | |
117 | end | |
118 | - | print("Receiving file: " .. fileName) |
118 | + | |
119 | local file = fs.open(fileName, "w") | |
120 | ||
121 | local id,msg | |
122 | while true do | |
123 | id,msg = rednet.receive() | |
124 | if id == remoteID then | |
125 | if string.sub(msg, 1, #"bluetooth.file:") == "bluetooth.file:" then | |
126 | local subbedData = string.sub(msg, #"bluetooth.file:" + 1) | |
127 | ||
128 | file.writeLine(subbedData) | |
129 | elseif msg == "bluetooth.done" then | |
130 | - | term.setTextColor(colors.lime) |
130 | + | |
131 | file.close() | |
132 | ||
133 | - | print(subbedData) |
133 | + | |
134 | term.setTextColor(colors.white) | |
135 | end | |
136 | ||
137 | print("Received file '" .. fileName .. "'.") | |
138 | ||
139 | return true | |
140 | end | |
141 | end | |
142 | end | |
143 | - | print("Received file!") |
143 | + | |
144 | end | |
145 | - | break |
145 | + | |
146 | ||
147 | if tArgs[1] == "receive" then | |
148 | receiveFile() | |
149 | elseif tArgs[1] == "send" and #tArgs == 3 then | |
150 | sendFile(tArgs[2], tArgs[3]) | |
151 | elseif tArgs[1] == "scan" then | |
152 | scan() | |
153 | else | |
154 | printUsage() | |
155 | end |