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

Annotation of /ModelEditor/MeAGMgr.py

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : efrank 1.1 #-----------------------------------------------------------------------------
2 :     # Name: MeAGMgr.py
3 :     # Defines: MeAGMgr.py
4 :     #
5 :     # History:
6 :     # 21Oct04 efrank First version
7 :     #
8 :     # Bugs:
9 :     #
10 : efrank 1.3 # RCS-ID: $Id: MeAGMgr.py,v 1.2 2004/10/23 18:55:47 efrank Exp $
11 : efrank 1.1 # Copyright: (c) 2004
12 :     # Licence: See COPYING.TXT
13 :     #-----------------------------------------------------------------------------
14 : efrank 1.3 __revision__ = "$Id: MeAGMgr.py,v 1.2 2004/10/23 18:55:47 efrank Exp $"
15 : efrank 1.1 __docformat__ = "restructuredtext en"
16 :    
17 :    
18 :     import xmlrpclib
19 :     from KahDataServices.KahCatAGCfgMgr import KahCatAGCfgMgr
20 :    
21 :    
22 :     class MeAGMgr( KahCatAGCfgMgr ):
23 :     """
24 :     Extends the KahCatAGCfgMgr beyond managing AG rendezvous for datafactories.
25 :     In addition, we manage event passing related to shared clipboards.
26 :     """
27 :    
28 :     #----------------------------------------------------------------------
29 :     def __init__(self, uri):
30 :     #----------------------------------------------------------------------
31 :     KahCatAGCfgMgr.__init__(self, uri )
32 : efrank 1.3
33 :     # whether or not we're sharing now
34 :     self.sharing= 0
35 :    
36 :     # connect info for the clipboard
37 : efrank 1.1 self.cbName = None
38 : efrank 1.2 self.host = None
39 :     self.port = None
40 : efrank 1.3
41 : efrank 1.1 return
42 :    
43 : efrank 1.3 #------------------------------------------------------------------------
44 :     def __del__(self):
45 :     #------------------------------------------------------------------------
46 :     """
47 :     @rtype: None
48 :    
49 :     Make sure done is called.
50 :     """
51 :    
52 :     self.done()
53 :     return
54 :    
55 :     #------------------------------------------------------------------------
56 :     def done(self):
57 :     #------------------------------------------------------------------------
58 :     """
59 :     @rtype: None
60 :     """
61 :    
62 :     self.delCb()
63 :     KahCatAGCfgMgr.done(self)
64 :    
65 :     return
66 : efrank 1.1
67 :     #----------------------------------------------------------------------
68 :     def registerHandlers(self, newCbHandler, changedCbHandler, delCbHandler):
69 :     #----------------------------------------------------------------------
70 :     """
71 :     Until this is called, we're just a kahCatAGCfgMgr. Once called,
72 :     we are wired in to handle clipboard sharing.
73 :    
74 :     BUG: we are completel ignoringn threading right now. Seems the
75 :     norm in AG shared apps???
76 :     """
77 :    
78 :     self.sharedAppClient.RegisterEventCallback("newCb", newCbHandler)
79 :     self.sharedAppClient.RegisterEventCallback("changedCb", changedCbHandler)
80 :     self.sharedAppClient.RegisterEventCallback("delCb", delCbHandler)
81 :    
82 :     return
83 :    
84 :    
85 :    
86 :     #----------------------------------------------------------------------
87 : efrank 1.2 def nameUsed(self, cbName):
88 : efrank 1.1 #----------------------------------------------------------------------
89 :     """
90 : efrank 1.2 @type cbName: string name for displaying clipboard
91 :    
92 :     Makes sure no one else is using this name.
93 :     """
94 :    
95 :     state = self.getAllCbState()
96 :     for cb in state:
97 :     # [(self.cbName, self.host, self.port), descList]
98 :     if (cbName == cb[0][0] ):
99 :     return 1
100 :    
101 :     return 0
102 :    
103 :    
104 :     #----------------------------------------------------------------------
105 :     def newCb(self, name, host, port):
106 :     #----------------------------------------------------------------------
107 :     """
108 :     @type name: string name for displaying clipboard
109 :     @type host: string connect info for data server
110 :     @type port: int connect info for data server
111 : efrank 1.1 Announce we're here
112 :     """
113 :    
114 :     # make sure name isn't used
115 :    
116 : efrank 1.2 if self.nameUsed( name ):
117 :     raise KeyError
118 : efrank 1.1
119 :     self.cbName = name
120 : efrank 1.2 self.host = host
121 :     self.port = port
122 : efrank 1.1
123 :     #from AccessGrid.GUID import GUID
124 :     #id = str(GUID())
125 :    
126 :     # each instance maintains state in server under a unique key.
127 :     # That state is the name of the clipboard and a list of pairs.
128 :     # Each pair is a name to display on the clipboard and a
129 :     # string key that can be used to retreive the actual data.
130 :    
131 :     key = self.sharedAppClient.GetPublicId()+"_cb"
132 :    
133 : efrank 1.2 l = [(self.cbName, self.host, self.port), []]
134 : efrank 1.1 s = xmlrpclib.dumps( (l,) )
135 :    
136 :     self.sharedAppClient.SetData(key,s)
137 : efrank 1.3 self.sharing = 1
138 : efrank 1.1
139 :     # let the world know
140 :     self.sharedAppClient.SendEvent("newCb", l)
141 :    
142 :     return
143 :    
144 :     #----------------------------------------------------------------------
145 :     def delCb(self):
146 :     #----------------------------------------------------------------------
147 :     """
148 :     @rtype: none
149 :    
150 :     Delete our clipboard from the shared space.
151 :     """
152 :    
153 : efrank 1.3 if not self.sharing: return
154 :    
155 : efrank 1.1 #Zero our state in the shared app (No RemoveData, so can't purge it
156 :    
157 :     key = self.sharedAppClient.GetPublicId()+"_cb"
158 :     self.sharedAppClient.SetData(key, "")
159 :    
160 :     #Notify others. We send no data because right now we rebuild
161 :     #the whole cb display each time anyway...we'll just disappear
162 :    
163 :     self.sharedAppClient.SendEvent("delCb", 1)
164 :    
165 :     return
166 :    
167 :    
168 :     #----------------------------------------------------------------------
169 : efrank 1.2 def cbChanged(self, descriptor):
170 : efrank 1.1 #----------------------------------------------------------------------
171 :     """
172 : efrank 1.2 @type descriptor: list of pairs. each pair=(recoElem name, int id)
173 : efrank 1.1 @rtype: none
174 :    
175 :     Broadcast that our cb has changed and record cb state in shared app
176 :     """
177 :    
178 : efrank 1.2 l = [ (self.cbName, self.host, self.port), descriptor ]
179 : efrank 1.1 s = xmlrpclib.dumps( (l,) )
180 :    
181 :    
182 :     key = self.sharedAppClient.GetPublicId()+"_cb"
183 :     self.sharedAppClient.SetData(key, s)
184 :    
185 :     self.sharedAppClient.SendEvent("changedCb", l)
186 :    
187 :     return
188 :    
189 :     #----------------------------------------------------------------------
190 :     def getAllCbState(self):
191 :     #----------------------------------------------------------------------
192 :     """
193 :     Gets all stored state related to clipboards and returns as
194 :     a list
195 :     """
196 :    
197 :     participants = self.sharedAppClient.GetParticipants()
198 :    
199 :     state = []
200 :    
201 :     for participant in participants:
202 :     exists = 0
203 :     key = participant.appId + "_cb"
204 :    
205 :     try:
206 :     d = self.sharedAppClient.GetData(key)
207 :     if d=="": continue
208 :     l = xmlrpclib.loads(d)[0][0]
209 :     state.append( l )
210 :     except Exception, e:
211 :     print e
212 :     continue
213 :    
214 :     print "state is ", state
215 :     return state
216 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3