[Bio] / ModelEditor / MeSharedEditServer.py Repository:
ViewVC logotype

Annotation of /ModelEditor/MeSharedEditServer.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download) (as text)

1 : efrank 1.1 #--------------------------------------------------------------
2 :     #
3 :     # MeSharedEditServer.py
4 :     #
5 :     #
6 :     #
7 :     # HISTORY:
8 :     # 22Oct04 efrank First version
9 :     #
10 :     # BUGS:
11 :     #--------------------------------------------------------------
12 :    
13 :     """
14 :     XmlRpc based server to shuttle data around between ModelEditor
15 :     instances. Right now, control is managed through AG shared app.
16 :     """
17 :    
18 :     import copy
19 :     from threading import Thread
20 :     from threading import Lock
21 :     import xmlrpclib
22 :     from SimpleXMLRPCServer import SimpleXMLRPCServer
23 : efrank 1.4 #from KahDataServices.XmlRpcConverter import XmlRpcConverter
24 :     #from KahDataServices.ConversionManager import ConversionManager
25 :     from KahDataServices.KahPrimitiveConverter import KahPrimitiveConverter
26 : efrank 1.1 from KahUtils.get_local_hostname import get_local_hostname
27 : efrank 1.4 #from KahOMGen.KahOMDataPrimitiveHandler import registerAll as registerKahOM
28 :     #from FoundryInfoGen.FoundryInfoDataPrimitiveHandler import registerAll as registerFoundryInfo
29 : efrank 1.1
30 :    
31 :     __clipboard = None
32 :     __nCb = None
33 :     __server = None
34 :     __serverThread = None
35 :     __cbLock = None
36 :    
37 :    
38 :    
39 :     def meSharedEditServerStart( ):
40 :     """
41 :     @type host: string
42 :     @type port: int
43 :     """
44 :    
45 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
46 :    
47 :     __clipboard = {}
48 :     __nCb = 0
49 :    
50 :     __cbLock = Lock()
51 :    
52 :     host=get_local_hostname()
53 :     __server = SimpleXMLRPCServer((host, 0))
54 :     (ip,port) = __server.socket.getsockname()
55 :     print "meSharedEditServerStart: using ", (host,port)
56 :     __server.register_function( getRecoElemById )
57 :    
58 :     __serverThread = Thread(target = meSharedEditServerThread,
59 :     args = () )
60 :    
61 :     print "starting server thread"
62 :     # need to make daemon???
63 :     __serverThread.setDaemon(True)
64 :     __serverThread.start()
65 :     print "server thread started"
66 :    
67 :     return (host,port)
68 :    
69 :    
70 :     def meSharedEditServerThread():
71 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
72 :     print "in server thread"
73 :    
74 :     #server = SimpleXMLRPCServer((host, port))
75 :     __server.serve_forever()
76 :    
77 :     return
78 :    
79 :    
80 :     def meSharedEditServerKill():
81 :     """ kills the server thread """
82 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
83 :     print "stopping shared edit server"
84 :     #__serverThread.xx()
85 :     return
86 :    
87 :    
88 :     def getCbDescriptor():
89 :     """
90 :     @rtype: list of pairs (itemName:string, itemId:int)
91 :    
92 :     Form descriptor for clipboard to put on AG shared AP
93 :     """
94 :    
95 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
96 :    
97 :     desc = []
98 :     __cbLock.acquire()
99 :     print __clipboard.keys()
100 :     print __clipboard.values()
101 :     for n in range(__nCb):
102 :     print "trying ", n, __clipboard[n]
103 : efrank 1.3 desc.append( ( __clipboard[n].getName(), n) )
104 : efrank 1.1 __cbLock.release()
105 :    
106 :     return desc
107 :    
108 :    
109 :    
110 :     def putOnClipboard( re ):
111 :     """
112 :     @type re: RecoElem. The item to put on the clipboard.
113 :     @rtype: int Integer id to use to get it back again.
114 :    
115 :     We do not deep copy the re. Caller should do that if
116 :     worried.
117 :     """
118 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
119 :    
120 :     __cbLock.acquire()
121 :     __clipboard[__nCb] = re
122 :     __cbLock.release()
123 :     __nCb += 1
124 :    
125 :     return __nCb
126 :    
127 :    
128 :     def getRecoElemByIdLocal(id):
129 :     """
130 :     Just returns recoElem with clipboard key, id. No xmlrpc
131 :    
132 :     @type id: int
133 :     @rtype: KahOM.RecoElem
134 :     """
135 :    
136 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
137 :    
138 : efrank 1.2 #print "local trying for ", id
139 : efrank 1.1 __cbLock.acquire()
140 :     try:
141 : efrank 1.2 #print "sending "
142 : efrank 1.1 __clipboard[id].dump()
143 :     re = copy.deepcopy( __clipboard[id] )
144 :     except Exception, e:
145 :     print "getRecoElemByIdLocal", e
146 :     re = None
147 :    
148 :     __cbLock.release()
149 :    
150 :     return re
151 :    
152 :    
153 :     def getRecoElemById(id):
154 :     """ Get RecoElem with given integer id (key into clipboard. Return xmlrpc """
155 :     # [0] is needed because xmlrpclib.dumps is used
156 :     global __server, __clipboard, __nCb, __serverThread, __cbLock
157 :    
158 : efrank 1.4 mgr = KahPrimitiveConverter( debugPrint = 1)
159 :    
160 : efrank 1.1 try:
161 :     print "trying for id ", id
162 :     __cbLock.acquire()
163 :     re = __clipboard[id]
164 : efrank 1.2 #print "sending re: "
165 :     #re.dump()
166 : efrank 1.4 #mgr = ConversionManager (XmlRpcConverter(), debug=1)
167 :     c = mgr.write(re)
168 : efrank 1.2 #print "rep is ", c
169 : efrank 1.1 __cbLock.release()
170 :     cRe = xmlrpclib.dumps((c,))
171 : efrank 1.2 #print "dumps is ", cRe
172 : efrank 1.1 except Exception, e:
173 :     __cbLock.release()
174 :     print e
175 :     return None
176 :    
177 :     return cRe
178 :    
179 :    
180 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3