288
|
1 #!/usr/bin/python
|
|
2 from twisted.web import server, resource,soap
|
|
3 from twisted.internet import reactor,defer
|
|
4 import os,time
|
|
5 import traceback
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10 class Server(soap.SOAPPublisher):
|
|
11 """
|
|
12 SOAP server for inkscape extension.
|
|
13 """
|
|
14 def soap_PUBLISH(self):
|
|
15 if self.client == None:
|
|
16 os.kill(self.pid,12)
|
|
17 time.sleep(1)
|
|
18 self.client = Client()
|
|
19 d = defer.Deferred()
|
|
20 self.client.PUBLISH().addCallback(self.quit,d)
|
|
21 return d
|
|
22
|
|
23 def quit(self,result,d):
|
|
24 print [result]
|
|
25 d.callback(result)
|
|
26 self.client = None
|
|
27 def soap_INSERTKEY(self,layer,n):
|
|
28 if self.client == None:
|
|
29 os.kill(self.pid,12)
|
|
30 time.sleep(1)
|
|
31 self.client = Client()
|
|
32 try:
|
|
33 n = int(n)
|
|
34 except:
|
|
35 n = 0
|
|
36 d = defer.Deferred()
|
|
37 self.client.INSERTKEY(layer,n).addCallback(self.generic_return,d).addErrback(self.generic_error,d)
|
|
38 return d
|
|
39 def soap_EXTENDSCENE(self,layer,n):
|
|
40 if self.client == None:
|
|
41 os.kill(self.pid,12)
|
|
42 time.sleep(1)
|
|
43 self.client = Client()
|
|
44 try:
|
|
45 n = int(n)
|
|
46 except:
|
|
47 n = 0
|
|
48 d = defer.Deferred()
|
|
49 self.client.EXTENDSCENE(layer,n).addCallback(self.generic_return,d).addErrback(self.generic_error,d)
|
|
50 return d
|
|
51 def soap_DELETESCENE(self,layer,n):
|
|
52 if self.client == None:
|
|
53 os.kill(self.pid,12)
|
|
54 time.sleep(1)
|
|
55 self.client = Client()
|
|
56 try:
|
|
57 n = int(n)
|
|
58 except:
|
|
59 n = 0
|
|
60 d = defer.Deferred()
|
|
61 self.client.DELETESCENE(layer,n).addCallback(self.generic_return,d).addErrback(self.generic_error,d)
|
|
62 return d
|
|
63
|
|
64 def soap_SCENE(self,n):
|
|
65 if self.client == None:
|
|
66 os.kill(self.pid,12)
|
|
67 time.sleep(1)
|
|
68 self.client = Client()
|
|
69
|
|
70 d = defer.Deferred()
|
|
71 self.client.SCENE(n).addCallback(self.generic_return,d)
|
|
72 return d
|
|
73 def generic_return(self,result,d):
|
|
74 print [result]
|
|
75 d.callback(result)
|
|
76 def generic_error(self,result,d):
|
|
77 print [result]
|
|
78 d.errback(result)
|
|
79 def soap_START(self):
|
|
80 if self.client == None:
|
|
81 os.kill(self.pid,12)
|
|
82 time.sleep(1)
|
|
83 self.client = Client()
|
|
84 return "OK"
|
|
85 def soap_GETDOC(self):
|
|
86 try:
|
|
87 print "xxxxx"
|
|
88 if self.client == None:
|
|
89 os.kill(self.pid,12)
|
|
90 time.sleep(1)
|
|
91 self.client = Client()
|
|
92 d = defer.Deferred()
|
|
93 self.client.GETDOC().addCallback(self.generic_return,d)
|
|
94 print "yyy"
|
|
95 return d
|
|
96 except:
|
|
97 traceback.print_exc()
|
|
98
|
|
99
|
|
100
|
|
101
|
|
102 class Client(object):
|
|
103 def __init__(self):
|
|
104 self.proxy = soap.Proxy('http://localhost:8080')
|
|
105 def PUBLISH(self):
|
|
106 return self.proxy.callRemote('PUBLISH')
|
|
107 def SCENE(self,n):
|
|
108 return self.proxy.callRemote('SCENE',n)
|
|
109 def INSERTKEY(self,layer,n):
|
|
110 return self.proxy.callRemote('INSERTKEY',layer,n)
|
|
111 def GETDOC(self):
|
|
112 return self.proxy.callRemote('GETDOC')
|
|
113 def EXTENDSCENE(self,layer,n):
|
|
114 return self.proxy.callRemote('EXTENDSCENE',layer,n)
|
|
115 def DELETESCENE(self,layer,n):
|
|
116 return self.proxy.callRemote('DELETESCENE',layer,n)
|
|
117
|
|
118 os.system("killall -9 inkscape-mb")
|
|
119 pid = os.fork()
|
|
120 if pid==0:
|
|
121 os.execvp("inkscape-mb",["inkscape-mb","/tmp/scene.mbsvg"])
|
|
122 s = Server()
|
|
123 s.client = None
|
|
124 s.pid = pid
|
|
125 site = server.Site(s)
|
|
126 reactor.listenTCP(19192,site)
|
|
127 reactor.run()
|
|
128
|
|
129
|