[Pykafe-commits] SF.net SVN: pykafe: [65] trunk/pykafe/client
Status: Pre-Alpha
Brought to you by:
jnmbk
|
From: <jn...@us...> - 2007-06-02 09:55:36
|
Revision: 65
http://pykafe.svn.sourceforge.net/pykafe/?rev=65&view=rev
Author: jnmbk
Date: 2007-06-02 02:55:38 -0700 (Sat, 02 Jun 2007)
Log Message:
-----------
changes in session and config, now it keeps trying until connected to a server
Modified Paths:
--------------
trunk/pykafe/client/client.py
trunk/pykafe/client/config.py
trunk/pykafe/client/login.py
trunk/pykafe/client/session.py
Modified: trunk/pykafe/client/client.py
===================================================================
--- trunk/pykafe/client/client.py 2007-06-02 09:54:44 UTC (rev 64)
+++ trunk/pykafe/client/client.py 2007-06-02 09:55:38 UTC (rev 65)
@@ -15,23 +15,40 @@
from PyQt4 import QtNetwork, QtCore
from config import PykafeConfiguration
from session import ClientSession
-import base64, sys, os, socket
+import base64, sys, os, socket, time
import locale, gettext
locale.setlocale(locale.LC_ALL, "C")
_ = gettext.translation("pyKafe_client", fallback=True).ugettext
+config = PykafeConfiguration()
+
+class SenderThread(QtCore.QThread):
+ def __init__(self, data):
+ QtCore.QThread.__init__(self)
+ self.data = data
+ def run(self):
+ while not sendDataToServer(self.data):
+ self.emit(QtCore.SIGNAL("connectionError"))
+ time.sleep(10)
+ self.emit(QtCore.SIGNAL("messageSent"))
+
def sendDataToServer(data):
tcpSocket = QtNetwork.QTcpSocket()
- tcpSocket.connectToHost(QtNetwork.QHostAddress(PykafeConfiguration().network.serverIP), PykafeConfiguration().network.port)
+ tcpSocket.connectToHost(QtNetwork.QHostAddress(config.network_serverIP), config.network_port)
tcpSocket.waitForConnected(-1)
- tcpSocket.write(base64.encodestring(data))
- tcpSocket.waitForBytesWritten()
- print "sent to server:", data
+ print "trying to send:", data
+ if tcpSocket.write(base64.encodestring(data)) == -1:
+ print "failed"
+ return False
+ else:
+ print "success"
+ tcpSocket.waitForBytesWritten()
+ return True
def sendDataToUi(data):
tcpSocket = QtNetwork.QTcpSocket()
- tcpSocket.connectToHost(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), PykafeConfiguration().network.localPort)
+ tcpSocket.connectToHost(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), config.network_localPort)
tcpSocket.waitForConnected(-1)
tcpSocket.write(base64.encodestring(data))
tcpSocket.waitForBytesWritten()
@@ -95,12 +112,11 @@
self.client.session.state = ClientSession.loggedIn
sendDataToUi("005")
elif data[:3] == "007":
- self.emit(QtCore.SIGNAL("filter"), data[4:])
iptablesFile = "*filter\n:INPUT ACCEPT [94:7144]\n:FORWARD ACCEPT [0:0]\n:OUTPUT ACCEPT [177:10428]\n"
for site in data[3:].split('\n'):
ip = getSiteIP(site)
if ip:
- iptablesFile += "-A INPUT -s %s -j DROP\n" % site
+ iptablesFile += "-A INPUT -s %s -j DROP\n" % ip
iptablesFile += "COMMIT\n"
file = open("/etc/pyKafe/iptables.conf", "w")
file.write(iptablesFile)
@@ -108,11 +124,17 @@
os.system("iptables-restore < /etc/pyKafe/iptables.conf")
elif data[:3] == "010":
os.system("init 0")
- self.exit()
+ elif data[:3] == "016":
+ for c, value in map(lambda x,y:(x,y), ("price_fixedprice", "price_fixedpriceminutes", "price_onehourprice", "price_rounding"), data[3:].split("|")):
+ config.set(c, value)
+ self.terminate()
def readUi(self):
data = base64.decodestring(self.tcpSocket.readAll())
print "received from user:", data
+ if self.client.session.state == ClientSession.notConnected:
+ sendDataToUi("014")
+ return
if data[:3] == "000":
if self.client.session.state == ClientSession.working:
sendDataToServer("000")
@@ -123,7 +145,7 @@
if self.client.session.state == ClientSession.working:
sendDataToServer(data)
elif data[:3] == "004":
- if self.client.session.state == ClientSession.notConnected:
+ if self.client.session.state == ClientSession.notReady:
sendDataToServer("004")
self.client.session.state = ClientSession.working
else:
@@ -139,18 +161,19 @@
class PykafeClient(QtNetwork.QTcpServer):
def __init__(self):
QtNetwork.QTcpServer.__init__(self)
- self.config = PykafeConfiguration()
self.session = ClientSession()
- self.threads = []
- self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), self.config.network.port)
- print "listening?", self.isListening()
- print "listening to:", QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any).toString() ,self.config.network.port
+ if not self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), config.network_port):
+ print "cant bind, exitting"
+ sys.exit()
+ thread = SenderThread("011")
+ QtCore.QObject.connect(thread, QtCore.SIGNAL("messageSent"), self.initialConnection)
+ self.threads = [thread]
+ print "trying to connect to server"
def incomingConnection(self, socketDescriptor):
- print "called incomingConnection"
thread = ListenerThread(socketDescriptor, self)
thread.start()
- QtCore.QObject.connect(thread,QtCore.SIGNAL("filter"),self.filterCame)
self.threads.append(thread)
print "We have " + str(len(self.threads)) + " thread(s)"
- def filterCame(self, text):
- print "filtering:", text
+ def initialConnection(self):
+ print "connected to server"
+ self.session.setState(ClientSession.notReady)
Modified: trunk/pykafe/client/config.py
===================================================================
--- trunk/pykafe/client/config.py 2007-06-02 09:54:44 UTC (rev 64)
+++ trunk/pykafe/client/config.py 2007-06-02 09:55:38 UTC (rev 65)
@@ -12,7 +12,9 @@
#TODO: Read config from config file
class PykafeConfiguration:
- class network:
- serverIP = "192.168.2.2"
- port = 23105
- localPort = 23106
\ No newline at end of file
+ network_serverIP = "192.168.2.2"
+ network_port = 23105
+ network_localPort = 23106
+
+ def set(self, config, value):
+ setattr(self, config, value)
Modified: trunk/pykafe/client/login.py
===================================================================
--- trunk/pykafe/client/login.py 2007-06-02 09:54:44 UTC (rev 64)
+++ trunk/pykafe/client/login.py 2007-06-02 09:55:38 UTC (rev 65)
@@ -10,7 +10,7 @@
# Please read the COPYING file.
#
-import base64, os, sys
+import base64, os, sys, sha, time
from PyQt4 import QtCore, QtGui, QtNetwork
from config import PykafeConfiguration
@@ -18,22 +18,28 @@
locale.setlocale(locale.LC_ALL, "C")
_ = gettext.translation("pyKafe_client", fallback=True).ugettext
+config = PykafeConfiguration()
+
class SenderThread(QtCore.QThread):
- def __init__(self, parent, data):
+ def __init__(self, parent, data, retry = False):
QtCore.QThread.__init__(self, parent)
self.data = data
+ self.retry = retry
def run(self):
tcpSocket = QtNetwork.QTcpSocket()
- tcpSocket.connectToHost(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), PykafeConfiguration().network.port)
- print "connecting to:", QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost).toString(), PykafeConfiguration().network.port
- if not tcpSocket.waitForConnected(-1):
- print "error:", tcpSocket.errorString(), "sending exit signal"
- self.emit(QtCore.SIGNAL("exit()"))
- else:
- tcpSocket.write(base64.encodestring(self.data))
- tcpSocket.waitForBytesWritten()
- print "sent:", self.data
- tcpSocket.disconnectFromHost()
+ tcpSocket.connectToHost(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), config.network_port)
+ while not tcpSocket.waitForConnected(-1) and self.retry:
+ self.emit(QtCore.SIGNAL("connectionError()"))
+ print "trying to reconnect in 5 seconds"
+ time.sleep(5)
+ tcpSocket.connectToHost(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), config.network_port)
+ if tcpSocket.write(base64.encodestring(self.data)) == -1:
+ print "couldn't send:", self.data
+ self.emit(QtCore.SIGNAL("connectionError()"))
+ self.terminate()
+ tcpSocket.waitForBytesWritten()
+ print "sent:", self.data
+ tcpSocket.disconnectFromHost()
class ListenerThread(QtCore.QThread):
def __init__(self, parent, socketDescriptor):
@@ -42,7 +48,8 @@
def run(self):
self.tcpSocket = QtNetwork.QTcpSocket()
self.tcpSocket.setSocketDescriptor(self.socketDescriptor)
- self.tcpSocket.waitForReadyRead()
+ self.tcpSocket.isReadable()
+ self.tcpSocket.waitForReadyRead(-1)
data = base64.decodestring(self.tcpSocket.readAll())
print "received:", data
if data[:3] == "001":
@@ -60,6 +67,8 @@
elif data[:3] == "005":
os.system("pyKafeclient&")
self.emit(QtCore.SIGNAL("close"))
+ elif data[:3] == "014":
+ self.emit(QtCore.SIGNAL("message"), _("Can't connect to server"))
self.tcpSocket.disconnectFromHost()
self.exec_()
@@ -67,10 +76,13 @@
def __init__(self, parent, ui):
QtNetwork.QTcpServer.__init__(self, parent)
self.ui = ui
- self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), PykafeConfiguration().network.localPort)
- print "listening localhost on port:", PykafeConfiguration().network.localPort
- thread = SenderThread(self.parent(), "004")
- QtCore.QObject.connect(thread, QtCore.SIGNAL("exit()"), parent.close)
+ listening = self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.LocalHost), config.network_localPort)
+ if not listening:
+ print "Can't bind port %d" % config.network_localPort
+ sys.exit()
+ print "listening localhost on port:", config.network_localPort
+ thread = SenderThread(self.parent(), "004", retry = True)
+ QtCore.QObject.connect(thread, QtCore.SIGNAL("connectionError()"), self.connectionError)
thread.start()
self.threads = [thread]
def incomingConnection(self, socketDescriptor):
@@ -81,13 +93,17 @@
self.threads.append(thread)
print "login has %d threads" % len(self.threads)
def login(self):
- thread = SenderThread(self.parent(), "002" + unicode(self.ui.username.text()) + "|" + unicode(self.ui.password.text()))
+ thread = SenderThread(self.parent(), "002" + unicode(self.ui.username.text()) + "|" + sha.new(unicode(self.ui.password.text())).hexdigest())
+ QtCore.QObject.connect(thread, QtCore.SIGNAL("connectionError()"), self.connectionError)
thread.start()
self.threads.append(thread)
def request(self):
thread = SenderThread(self.parent(), "000")
+ QtCore.QObject.connect(thread, QtCore.SIGNAL("connectionError()"), self.connectionError)
thread.start()
self.threads.append(thread)
+ def connectionError(self):
+ self.ui.statusbar.showMessage(_("Can't connect to local daemon, please contact cashier"))
class Ui_LoginWindow(object):
def setupUi(self, MainWindow):
@@ -165,7 +181,7 @@
MainWindow.setTabOrder(self.password,self.loginButton)
def retranslateUi(self, LoginWindow):
- LoginWindow.setWindowTitle(_("pyKafe"))
+ LoginWindow.setWindowTitle("pyKafe")
self.textLabel1.setText(_("Username:"))
self.loginButton.setText(_("Login"))
self.textLabel2.setText(_("Password:"))
Modified: trunk/pykafe/client/session.py
===================================================================
--- trunk/pykafe/client/session.py 2007-06-02 09:54:44 UTC (rev 64)
+++ trunk/pykafe/client/session.py 2007-06-02 09:55:38 UTC (rev 65)
@@ -16,12 +16,13 @@
class ClientSession:
"""class for managing client sessions"""
- notAvailable, notConnected, working, loggedIn, requestedOpening = range(5)
+ notConnected, notReady, working, loggedIn, requestedOpening, waitingMoney = range(6)
def __init__(self):
self.state = 0
self.user = None
self.settings = None
self.startTime = None
+ self.endTime = None
self.orders = []
def isReachable(self):
@@ -39,16 +40,20 @@
return True
else:
return False
- def getCurrentState(self):
+ def toString(self):
"""returns current state as a string"""
- if self.state == self.notAvailable:
- return _("N/A")
+ if self.state == self.notConnected:
+ return _("Not Connected")
elif self.state == self.working:
return _("Ready")
elif self.state == self.loggedIn:
return _("Logged In")
elif self.state == self.requestedOpening:
return _("Requested Opening")
+ elif self.state == self.waitingMoney:
+ return _("Waiting for Payment")
+ elif self.state == self.notReady:
+ return _("Not ready")
def setState(self, stateNumber):
- self.state = stateNumber
\ No newline at end of file
+ self.state = stateNumber
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|