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

Annotation of /ModelEditor/MeSharedEditServer.py

Parent Directory Parent Directory | Revision Log Revision Log


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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3