summaryrefslogtreecommitdiffstats
path: root/frouter.py
diff options
context:
space:
mode:
Diffstat (limited to 'frouter.py')
-rw-r--r--frouter.py374
1 files changed, 187 insertions, 187 deletions
diff --git a/frouter.py b/frouter.py
index 186ac02..5bc6fa5 100644
--- a/frouter.py
+++ b/frouter.py
@@ -32,7 +32,7 @@ __all__ = ["Frouter"]
from fdoor_file import Fdoor_file
from fdoor_cout import Fdoor_cout
from fprg_concat import Fdoor_concat
-
+
from fport import Fport
from fconfig import Fconfig
from fevenboard import FevenBoard
@@ -50,193 +50,193 @@ from returncodes import RET_NOTEXIST
class Frouter(FportListHash):
- def __init__(self):
- FportListHash.__init__(self)
-
- def __str__(self):
- return "\t"+FportListHash.__str__(self)+\
- "Frouter - (null)\n"
-
- def start(self,port,param):
- """/** Starts import the config file ( or other stream), and sets the parentrouter.
- If the port (evenDoor and evenBoard) need to send an evenData. */"""
- ret = Fport.start(self,port,param)
- if ret == RET_OK:
- return self.createRoom()
- return ret
-
- def getClassInfos(self,classInfo):
- """/** Get the informations concerning the creation of a port (room, evenprg, etc...) */"""
- ret = RET_OK
- self.pushCurrent()
- if self.gotoChildren() != RET_OK:
- return RET_NOTEXIST
-
- def search(string):
- if self.Find(string) == RET_OK:
- return self.getContent()
- return None
-
- classInfo['type'] = search(ES.XML_CLASS)
- classInfo['conf'] = search(ES.XML_CONF)
- classInfo['lib'] = search(ES.XML_LIB)
- classInfo['debug'] = search(ES.XML_DEBUG)
-
- self.popCurrent()
- return ret
-
- def getLinkInfos(self,linkInfo):
- """/** Get the informations concerning the cration of a port (room, evenprg, etc...) */"""
- ret = RET_OK
- self.pushCurrent()
- if self.gotoChildren() != RET_OK:
- return RET_NOTEXIST
-
- def search(string):
- if self.Find(string) == RET_OK:
- return self.getContent()
- return None
-
- linkInfo['source'] = search(ES.XML_LNKSOURCE)
- linkInfo['type'] = search(ES.XML_LNKTYPE)
- linkInfo['value'] = search(ES.XML_LNKVALUE)
- linkInfo['fields'] = search(ES.XML_LNKFIELDS)
- linkInfo['dest'] = search(ES.XML_LNKDEST)
-
- self.popCurrent()
- return ret
-
- def createRoom(self):
- """/** Create a room with a structure defined by the config or node in start method */"""
- classInfos = { 'type':None,\
- 'conf':None,\
- 'lib':None,\
- 'debug':None}
-
- linkInfos = { 'source':None,\
- 'type':None,\
- 'value':None,\
- 'fields':None,\
- 'dest':None}
- strH = FstringHash()
- port = Fport
-
- # search for rooms, boards, doors and programms
- def IMPORT_PORTS(A,B,CLASS):
- if self.Find(A,False) == RET_OK:
- while True:
- self.pushCurrent()
- # read informations
- self.getClassInfos(classInfos)
- # let's build and start this
- # if both are None or strcasecmp
- # TODO ugliest code in this library
- if ((classInfos['type']==None and B==None) or \
- (B <> None and classInfos['type'] <> None\
- and (classInfos['type'].upper() == B.upper()))):
- childRoom = CLASS()
- if classInfos['conf'] <> None:
- childRoom.start(self,classInfos['conf'])
- else:
- childRoom.start(self,self.current)
- ptr = self.listHash.addOrGet(childRoom)
- if ptr <> None:
- ptr = None
- return RET_PORTEXIST
- self.popCurrent()
- # search for a next one
- if self.FindNext(A,False) != RET_OK:
- break
-
- self.resetCurrent()
- if self.gotoChildren() != RET_OK:
- return RET_NOINFOS
- # search and build
- IMPORT_PORTS( ES.XML_ROOM,None,Frouter)
- IMPORT_PORTS( ES.XML_ROOM,"ROOM",Frouter)
- IMPORT_PORTS( ES.XML_BOARD,None,FevenBoard)
- IMPORT_PORTS( ES.XML_BOARD,"BOARD",FevenBoard)
-
- IMPORT_PORTS( ES.XML_DOOR, "file", Fdoor_file)
- IMPORT_PORTS( ES.XML_DOOR, "cout", Fdoor_cout)
- IMPORT_PORTS( ES.XML_PRG, "concat", Fdoor_concat)
-
- # seach for <envenja_link>, if dosen't exists, create an evendata and send it
- if self.Find(ES.XML_LNK, False) != RET_OK:
- return RET_OK
- while True:
- self.pushCurrent()
- self.getLinkInfos(linkInfos)
- if linkInfos['source'] <> None:
- strH.setString(linkInfos['source'])
- port = self.listHash.Search(strH)
- # if this source has been built, send a ACT_SYS_ADDDEST msg
- if port <> None:
- data = self.getFreeEvenData()
- data.setData( ES.XML_LNKTYPE, linkInfos['type'])
- data.setData( ES.XML_LNKVALUE, linkInfos['value'])
- data.setData( ES.XML_LNKFIELDS, linkInfos['fields'])
- data.setData( ES.XML_LNKDEST, linkInfos['dest'])
-
- data.definePortAction( ES.ACT_SYS_ADDDEST, linkInfos['source'])
- self.sendEvenDataSys(data,port)
- self.popCurrent()
- if self.FindNext( ES.XML_LNK,False) != RET_OK:
- break
- return RET_OK
-
- def receive_evenData(self,evenData):
- """/** Receive the evenData to be routed to the right router or port. */"""
- port = self.listHash.Search(evenData.getCurrentDestination().getPort())
- if port <> None:
- #// ... then send to it the evenData
- #// Now it send the evenData by sndMsg, but normally this will change after the realeas of V3.0
- #// sendEvenData( evenData, port);
- #// return RET_OK;
- #// ...this will work well too, but it is another principle
- return port.justDoIt(evenData)
- evenData.definePortAction(ES.ACT_ERROR)
- return RET_OK
-
- def justDoIt(self,evenData):
- """/** Methods called by Fstarter */"""
- tmp = evenData.getCurrentDestination().getAction()
- if tmp.equals(gvActionEnd) or tmp.equals(gvActionError):
- self.setFreeEvenData(evenData)
- return RET_OK
- return Fport.justDoIt(self,evenData)
-
- def end(self):
- """/** Deploy the end() until the port. */"""
- for I in range(self.listHash.getCount()):
- self.listHash.get(I).end()
- return Fconfig.endXml(self)
+ def __init__(self):
+ FportListHash.__init__(self)
+
+ def __str__(self):
+ return "\t"+FportListHash.__str__(self)+\
+ "Frouter - (null)\n"
+
+ def start(self,port,param):
+ """/** Starts import the config file ( or other stream), and sets the parentrouter.
+ If the port (evenDoor and evenBoard) need to send an evenData. */"""
+ ret = Fport.start(self,port,param)
+ if ret == RET_OK:
+ return self.createRoom()
+ return ret
+
+ def getClassInfos(self,classInfo):
+ """/** Get the informations concerning the creation of a port (room, evenprg, etc...) */"""
+ ret = RET_OK
+ self.pushCurrent()
+ if self.gotoChildren() != RET_OK:
+ return RET_NOTEXIST
+
+ def search(string):
+ if self.Find(string) == RET_OK:
+ return self.getContent()
+ return None
+
+ classInfo['type'] = search(ES.XML_CLASS)
+ classInfo['conf'] = search(ES.XML_CONF)
+ classInfo['lib'] = search(ES.XML_LIB)
+ classInfo['debug'] = search(ES.XML_DEBUG)
+
+ self.popCurrent()
+ return ret
+
+ def getLinkInfos(self,linkInfo):
+ """/** Get the informations concerning the cration of a port (room, evenprg, etc...) */"""
+ ret = RET_OK
+ self.pushCurrent()
+ if self.gotoChildren() != RET_OK:
+ return RET_NOTEXIST
+
+ def search(string):
+ if self.Find(string) == RET_OK:
+ return self.getContent()
+ return None
+
+ linkInfo['source'] = search(ES.XML_LNKSOURCE)
+ linkInfo['type'] = search(ES.XML_LNKTYPE)
+ linkInfo['value'] = search(ES.XML_LNKVALUE)
+ linkInfo['fields'] = search(ES.XML_LNKFIELDS)
+ linkInfo['dest'] = search(ES.XML_LNKDEST)
+
+ self.popCurrent()
+ return ret
+
+ def createRoom(self):
+ """/** Create a room with a structure defined by the config or node in start method */"""
+ classInfos = { 'type':None,\
+ 'conf':None,\
+ 'lib':None,\
+ 'debug':None}
+
+ linkInfos = { 'source':None,\
+ 'type':None,\
+ 'value':None,\
+ 'fields':None,\
+ 'dest':None}
+ strH = FstringHash()
+ port = Fport
+
+ # search for rooms, boards, doors and programms
+ def IMPORT_PORTS(A,B,CLASS):
+ if self.Find(A,False) == RET_OK:
+ while True:
+ self.pushCurrent()
+ # read informations
+ self.getClassInfos(classInfos)
+ # let's build and start this
+ # if both are None or strcasecmp
+ # TODO ugliest code in this library
+ if ((classInfos['type']==None and B==None) or \
+ (B <> None and classInfos['type'] <> None\
+ and (classInfos['type'].upper() == B.upper()))):
+ childRoom = CLASS()
+ if classInfos['conf'] <> None:
+ childRoom.start(self,classInfos['conf'])
+ else:
+ childRoom.start(self,self.current)
+ ptr = self.listHash.addOrGet(childRoom)
+ if ptr <> None:
+ ptr = None
+ return RET_PORTEXIST
+ self.popCurrent()
+ # search for a next one
+ if self.FindNext(A,False) != RET_OK:
+ break
+
+ self.resetCurrent()
+ if self.gotoChildren() != RET_OK:
+ return RET_NOINFOS
+ # search and build
+ IMPORT_PORTS( ES.XML_ROOM,None,Frouter)
+ IMPORT_PORTS( ES.XML_ROOM,"ROOM",Frouter)
+ IMPORT_PORTS( ES.XML_BOARD,None,FevenBoard)
+ IMPORT_PORTS( ES.XML_BOARD,"BOARD",FevenBoard)
+
+ IMPORT_PORTS( ES.XML_DOOR, "file", Fdoor_file)
+ IMPORT_PORTS( ES.XML_DOOR, "cout", Fdoor_cout)
+ IMPORT_PORTS( ES.XML_PRG, "concat", Fdoor_concat)
+
+ # seach for <envenja_link>, if dosen't exists, create an evendata and send it
+ if self.Find(ES.XML_LNK, False) != RET_OK:
+ return RET_OK
+ while True:
+ self.pushCurrent()
+ self.getLinkInfos(linkInfos)
+ if linkInfos['source'] <> None:
+ strH.setString(linkInfos['source'])
+ port = self.listHash.Search(strH)
+ # if this source has been built, send a ACT_SYS_ADDDEST msg
+ if port <> None:
+ data = self.getFreeEvenData()
+ data.setData( ES.XML_LNKTYPE, linkInfos['type'])
+ data.setData( ES.XML_LNKVALUE, linkInfos['value'])
+ data.setData( ES.XML_LNKFIELDS, linkInfos['fields'])
+ data.setData( ES.XML_LNKDEST, linkInfos['dest'])
+
+ data.definePortAction( ES.ACT_SYS_ADDDEST, linkInfos['source'])
+ self.sendEvenDataSys(data,port)
+ self.popCurrent()
+ if self.FindNext( ES.XML_LNK,False) != RET_OK:
+ break
+ return RET_OK
+
+ def receive_evenData(self,evenData):
+ """/** Receive the evenData to be routed to the right router or port. */"""
+ port = self.listHash.Search(evenData.getCurrentDestination().getPort())
+ if port <> None:
+ #// ... then send to it the evenData
+ #// Now it send the evenData by sndMsg, but normally this will change after the realeas of V3.0
+ #// sendEvenData( evenData, port);
+ #// return RET_OK;
+ #// ...this will work well too, but it is another principle
+ return port.justDoIt(evenData)
+ evenData.definePortAction(ES.ACT_ERROR)
+ return RET_OK
+
+ def justDoIt(self,evenData):
+ """/** Methods called by Fstarter */"""
+ tmp = evenData.getCurrentDestination().getAction()
+ if tmp.equals(gvActionEnd) or tmp.equals(gvActionError):
+ self.setFreeEvenData(evenData)
+ return RET_OK
+ return Fport.justDoIt(self,evenData)
+
+ def end(self):
+ """/** Deploy the end() until the port. */"""
+ for I in range(self.listHash.getCount()):
+ self.listHash.get(I).end()
+ return Fconfig.endXml(self)
if __name__ == '__main__':
- import unittest
-
- router1 = Frouter()
- router2 = Frouter()
-
- class FrouterTestCase(unittest.TestCase):
-
- def test1Name(self):
- self.assertEquals(router1.start( None, "testezlog.xml"),RET_OK)
- strH = FstringHash()
- strH.setString( "TEST00")
-
- #// TEST Name from file
- self.assertEquals(router1.equals( strH),True)
-
- #// TEST from node config
- conf = Fconfig()
- conf.startXml( "testezlog.xml")
- router2.start( None, conf.getCurrent())
- self.assertEquals(router2.equals( strH),True)
- router1.end()
- router2.end()
-
-
- unittest.main()
+ import unittest
+
+ router1 = Frouter()
+ router2 = Frouter()
+
+ class FrouterTestCase(unittest.TestCase):
+
+ def test1Name(self):
+ self.assertEquals(router1.start( None, "testezlog.xml"),RET_OK)
+ strH = FstringHash()
+ strH.setString( "TEST00")
+
+ #// TEST Name from file
+ self.assertEquals(router1.equals( strH),True)
+
+ #// TEST from node config
+ conf = Fconfig()
+ conf.startXml( "testezlog.xml")
+ router2.start( None, conf.getCurrent())
+ self.assertEquals(router2.equals( strH),True)
+ router1.end()
+ router2.end()
+
+
+ unittest.main()