Skip to content

Commit

Permalink
add set gtk version, add connection statistic thread
Browse files Browse the repository at this point in the history
  • Loading branch information
p-eli committed Oct 9, 2015
1 parent bceef17 commit 9bd37da
Show file tree
Hide file tree
Showing 15 changed files with 134 additions and 26 deletions.
Binary file added createApGui/__pycache__/__init__.cpython-35.pyc
Binary file not shown.
Binary file not shown.
Binary file added createApGui/__pycache__/gui.cpython-35.pyc
Binary file not shown.
Binary file added createApGui/__pycache__/language.cpython-35.pyc
Binary file not shown.
Binary file added createApGui/__pycache__/runningAp.cpython-35.pyc
Binary file not shown.
Binary file not shown.
Binary file added createApGui/__pycache__/trayIcon.cpython-35.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
10 changes: 8 additions & 2 deletions createApGui/createEditAp.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
#!/usr/bin/python3
__author__ = 'Jakub Pelikan'
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango,GObject
from createApGui.terminalInterface import TerminalInterface
import re



class CreateEditAp(Gtk.Window):

GObject.signal_new("interfaceListMsg", GObject.GObject, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
def __init__(self, setting):
Gtk.Window.__init__(self, title='Create AP')
self.setting = setting
Expand Down Expand Up @@ -121,10 +128,9 @@ def initCreatePage(self):

def initEditPage(self):
self.interfaceListSignal = GObject.GObject()
GObject.signal_new("interfaceListMsg", self.interfaceListSignal, GObject.SIGNAL_RUN_FIRST,
GObject.TYPE_NONE, ())
self.interfaceListSignal.connect('interfaceListMsg', self.readInterfaceList)
self.initInterfaceList()

table = Gtk.Table(10,3,True)
table.set_border_width(10)
table.set_row_spacings(10)
Expand Down
2 changes: 2 additions & 0 deletions createApGui/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from createApGui.createEditAp import CreateEditAp
from createApGui.language import Languge
from createApGui.runningAp import RunningAp
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import os

Expand Down
101 changes: 82 additions & 19 deletions createApGui/runningAp.py
Original file line number Diff line number Diff line change
@@ -1,53 +1,67 @@
#!/usr/bin/python3
__author__ = 'Jakub Pelikan'
from createApGui.terminalInterface import TerminalInterface
from createApGui.terminalInterface import TerminalInterface, Statistic
import threading
import re
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GObject

signalNewMsg = 'newMsg'
signalUpdateStatistic = 'updateStatistic'

class RunningAp():
GObject.signal_new(signalNewMsg, GObject.GObject, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
GObject.signal_new(signalUpdateStatistic, GObject.GObject, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())

def __init__(self, setting, tray=None, statusWindow=None):
self.setting = setting
self._ = self.setting['language'].gettext
self.updatingPage = {'tray':tray, 'statusWindow':statusWindow}
self.lock = threading.Lock()
self.interfaceLock = threading.Lock()
self.statisticLock = threading.Lock()

self.mysignal = GObject.GObject()
GObject.signal_new("newMsg", self.mysignal, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
GObject.signal_new("updateStatistic", self.mysignal, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
self.mysignal.connect('newMsg', self.newCmdMsg)
self.mysignal.connect(signalNewMsg, self.newCmdMsg)
self.mysignal.connect(signalUpdateStatistic, self.updateStatistic)
self.reInit()


def reInit(self):
self.lock.acquire()
self.interfaceLock.acquire()
self.__activeAp = {'name':'None', 'passwd':'None', 'interface1':'None', 'interface2':'None'}
self.__status = {'active':False,'text':self._('No active AP'),'button':self._('Connect')}
self.errorMsg = {'newMsg':False,'title':None, 'text':None}
self.interface = TerminalInterface(self.mysignal,'newMsg')
self.lock.release()
self.__statistic = {'startReceived':None,'startSending':None,'reciving':0, 'totalReceived':0, 'sending':0, 'totalSent':0}
#init Thread
self.interfaceThread = TerminalInterface(self.mysignal,signalNewMsg)
self.statisticThread = Statistic(self.mysignal,signalUpdateStatistic)
self.interfaceLock.release()

def runAp(self):
if self.__status['active']:
self.stopAp()
if self.errorMsg['newMsg']:
self.reInit()
self.lock.acquire()
self.interfaceLock.acquire()
if self.__activeAp['name']!='None':
self.interface.command = ['create_ap'+' '+self.__activeAp['interface1']+' '+self.__activeAp['interface2']+' '+self.__activeAp['name']+' '+self.__activeAp['passwd']]
self.interface.start()
self.interfaceThread.command = ['create_ap'+' '+self.__activeAp['interface1']+' '+self.__activeAp['interface2']+' '+self.__activeAp['name']+' '+self.__activeAp['passwd']]
self.interfaceThread.start()
self.__status['text'] = self._('Creating AP...')
self.__status['button'] = self._('Disconnect')
self.__status['active'] = True

self.lock.release()
self.interfaceLock.release()
self.updatingStatus()
self.runStatistic()

def stopAp(self):
self.interface.stop()
self.interfaceThread.stop()
self.stopStatistic()
self.reInit()

def newCmdMsg(self, signal=None):
self.lock.acquire()
msg = self.interface.read()
self.interfaceLock.acquire()
msg = self.interfaceThread.read()
if 'ERROR:' in msg or 'command not found' in msg:
self.errorMsg['newMsg'] = True
self.errorMsg['title'] = self._('Create failed')
Expand All @@ -66,9 +80,45 @@ def newCmdMsg(self, signal=None):
# self.lock.release()
# return

self.lock.release()
self.interfaceLock.release()
self.updatingStatus()

def runStatistic(self):
if self.__status['active']:
print('run statistic')
self.statisticThread.command = ['ifconfig'+' '+self.__activeAp['interface1']]
self.statisticThread.start()

def updateStatistic(self, signal=None):
print('update statistic')
msg = self.statisticThread.read()
if 'RX' in msg and 'bytes' in msg:
self.statisticLock.acquire()
try:
line = re.search('RX[^\(]*[^\)]*\)', msg).group(0)
print(line)
value = line.find('\([\)]*)')
# value = re.search('\(*[^\)]*', line).group(0)
print(value)
except AttributeError:
pass
if self.__statistic['startReceived'] == None:
pass
#todo self.__statistic['startReceived'] ==
self.statisticLock.release()

if 'TX' in msg and 'bytes' in msg:
self.statisticLock.acquire()

if self.__statistic['startSending'] == None:
pass
#todo self.__statistic['startReceived'] ==
self.statisticLock.release()
#self.updatingStatus()

def stopStatistic(self):
self.statisticThread.stop()

def updatingStatus(self):
if self.updatingPage['statusWindow']:
self.updatingPage['statusWindow']()
Expand All @@ -88,7 +138,20 @@ def activeAp(self, data):

@property
def status(self):
self.lock.acquire()
self.interfaceLock.acquire()
value = self.__status
self.lock.release()
self.interfaceLock.release()
return value

@status.setter
def status(self, data):
pass

@property
def statistic(self):
return self.__statistic

@statistic.setter
def statistic(self):
pass

43 changes: 38 additions & 5 deletions createApGui/terminalInterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
import threading
import os
import signal

import time
class TerminalInterface(threading.Thread):
def __init__(self, mySignal, signalMsg):
def __init__(self, mySignal, signalName):
threading.Thread.__init__(self)
self.signalMsg = signalMsg
self.signalName = signalName
self.mySignal = mySignal
self.output = ''
self.p1 = None
Expand All @@ -18,7 +18,6 @@ def run(self):
self.lock.acquire()
if self.output != '':
self.lock.release()
import time
time.sleep(0.3)

def read(self):
Expand All @@ -34,10 +33,44 @@ def bashCommunicate(self):
self.lock.acquire()
self.output = self.output+'\n'+line.rstrip().decode('utf-8')
self.lock.release()
self.mySignal.emit(self.signalMsg)
self.mySignal.emit(self.signalName)

def stop(self):
if self.p1 != None:
os.kill(self.p1.pid, signal.SIGINT)
self.p1 = None


class Statistic(threading.Thread):
def __init__(self, mySignal, signalName):
threading.Thread.__init__(self)
self.__mySignal = mySignal
self.__signalName = signalName
self.__running = True
self.command = ''
self.__output = None
self.__lock = threading.Lock()

def read(self):
self.__lock.acquire()
output = self.output
self.output = ''
self.__lock.release()
return output

def run(self):
while self.__running:
p = subprocess.Popen(self.command, stdout=subprocess.PIPE, shell=True)
self.__lock.acquire()
try:
output = p.communicate()
self.output = output[0].decode('utf-8')
except:
self.output = ''
finally:
self.__lock.release()
self.__mySignal.emit(self.__signalName)
time.sleep(2)

def stop(self):
self.__running = False
2 changes: 2 additions & 0 deletions createApGui/trayIcon.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/usr/bin/python3
__author__ = 'Jakub Pelikan'
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from createApGui.trayRightClickMenu import TrayRightClickMenu
from createApGui.createEditAp import CreateEditAp
Expand Down
2 changes: 2 additions & 0 deletions createApGui/trayRightClickMenu.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/usr/bin/python3
__author__ = 'Jakub Pelikan'
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from createApGui.createEditAp import CreateEditAp

Expand Down

0 comments on commit 9bd37da

Please sign in to comment.