summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xnopsyncd/qlistener.lua29
-rw-r--r--nopsyncd/rddb.lua71
-rwxr-xr-xnopsyncd/tcpserver.lua9
-rw-r--r--nopsyncd/tempstorage.lua (renamed from nopsyncd/db.lua)16
4 files changed, 111 insertions, 14 deletions
diff --git a/nopsyncd/qlistener.lua b/nopsyncd/qlistener.lua
index 9498fbb..b7c74d8 100755
--- a/nopsyncd/qlistener.lua
+++ b/nopsyncd/qlistener.lua
@@ -22,7 +22,8 @@
local queue_name = "/rhnop"
mq = require "luamq"
-db = require "db"
+tempstorage = require "tempstorage"
+rddb = require "rddb"
function main_loop()
local q, err = mq.create(queue_name, "ro")
@@ -31,9 +32,16 @@ function main_loop()
os.exit(1)
end
- local ret, err = db:init()
+ local ret, err = tempstorage:init()
if ret == nil then
- io.stderr:write("creation of db failed: " .. err .. "\n")
+ io.stderr:write("creation of tempstorage failed: " .. err .. "\n")
+ os.exit(1)
+ end
+
+ local ret, err = rddb:init()
+ if ret == nil then
+ io.stderr:write("opening rivendell db failed: " .. err .. "\n")
+ tempstorage:close()
os.exit(1)
end
@@ -41,6 +49,8 @@ function main_loop()
local msg, prio = mq.receive(q)
if msg == nil then
io.stderr:write("recv error: " .. prio .. "\n")
+ rddb:close()
+ tempstorage:close()
os.exit(2)
end
@@ -48,9 +58,14 @@ function main_loop()
if not timestamp or not nowcart or not nowlen or not nextcart or not nextlen then
io.stderr:write("ignoring malformed message\n")
else
- -- TODO: lookup info in Rivendell DB and insert into temporary storage
- print("received message:\ntimestamp = " .. timestamp .. "\nnowcart = " .. nowcart .. "\nnowlen = " .. nowlen .. "\nnextcart = " .. nextcart .. "\nnextlen = " .. nextlen)
- pipe.signal()
+ local results, err = rddb:getCartInfo(nowcart);
+ if results == nil then
+ io.stderr:write("can't fetch cart info: " .. err .. "\n")
+ else
+ -- TODO: insert into tempstorage
+ print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'")
+ pipe.signal()
+ end
end
end
-end \ No newline at end of file
+end \ No newline at end of file
diff --git a/nopsyncd/rddb.lua b/nopsyncd/rddb.lua
new file mode 100644
index 0000000..1a16a4d
--- /dev/null
+++ b/nopsyncd/rddb.lua
@@ -0,0 +1,71 @@
+--
+-- rhnop
+--
+-- Copyright (C) 2011 Christian Pointner <equinox@helsinki.at>
+--
+-- This file is part of rhnop.
+--
+-- rhnop is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+--
+-- rhnop is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with rhnop. If not, see <http://www.gnu.org/licenses/>.
+--
+
+require "luasql.mysql"
+
+local rddb = {}
+
+function rddb:init()
+ local err
+
+ self.env, err = luasql.mysql()
+ if self.env == nil then
+ return nil, err
+ end
+
+ -- TODO: read /etc/rd.conf for connection info
+ self.con, err = self.env:connect("rivendell", "rivendellro", "lldrivenro", "127.0.0.1")
+ if self.con == nil then
+ return nil, err
+ end
+
+ return true
+end
+
+function rddb:getCartInfo(cartnum)
+ -- TODO: SQL Injections!!!
+ local cur, err = self.con:execute("select TITLE,ARTIST,ALBUM from CART where NUMBER = " .. cartnum);
+ if cur == nil then
+ return nil, err
+ end
+
+ if cur:numrows() ~= 1 then
+ return nil, "nothing found in rivendell db"
+ end
+
+ local results = {}
+ results, err = cur:fetch(results, "a")
+ cur:close()
+
+ return results, err
+end
+
+function rddb:close()
+ if self.con then
+ self.con:close()
+ end
+
+ if self.env then
+ self.env:close()
+ end
+end
+
+return rddb
diff --git a/nopsyncd/tcpserver.lua b/nopsyncd/tcpserver.lua
index fc19b9c..3f7c70a 100755
--- a/nopsyncd/tcpserver.lua
+++ b/nopsyncd/tcpserver.lua
@@ -20,7 +20,7 @@
--
require "socket"
-db = require "db"
+tempstorage = require "tempstorage"
function init_server()
local server = assert(socket.tcp())
@@ -86,9 +86,9 @@ end
function main_loop()
local pipefd = pipe.getreadfd()
- local ret, err = db:init()
+ local ret, err = tempstorage:init()
if ret == nil then
- io.stderr:write("creation of db failed: " .. err .. "\n")
+ io.stderr:write("creation of tempstorage failed: " .. err .. "\n")
os.exit(1)
end
@@ -133,8 +133,9 @@ function main_loop()
end
end
+ tempstorage:close()
server:close()
- cleanup_clients()
+ cleanup_clients()
return 0
end
diff --git a/nopsyncd/db.lua b/nopsyncd/tempstorage.lua
index ffdefed..f034647 100644
--- a/nopsyncd/db.lua
+++ b/nopsyncd/tempstorage.lua
@@ -21,9 +21,9 @@
require "luasql.sqlite3"
-local db = {}
+local tempstorage = {}
-function db:init()
+function tempstorage:init()
local err
self.env, err = luasql.sqlite3()
@@ -49,4 +49,14 @@ function db:init()
return true
end
-return db
+function tempstorage:close()
+ if self.con then
+ self.con:close()
+ end
+
+ if self.env then
+ self.env:close()
+ end
+end
+
+return tempstorage