Report this | Email | Print
100 ################################ receive osc from The Other.
101
102 class OSCServer(Thread) :
103 def __init__(self, ipAddr='127.0.0.1', port = 9001) :
104 Thread.__init__(self)
105 self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
106 try :
107 self.socket.bind( (ipAddr, port) )
108 self.socket.settimeout(1.0) # make sure its not blocking forever...
109 self.haveSocket=True
110 except socket.error:
111 print 'there was an error binding to ip %s and port %i , maybe the port is already taken by another process?' % (ipAddr. port)
112 self.haveSocket=False
113
114 def run(self):
115 if self.haveSocket :
116 self.isRunning = True
117 while self.isRunning:
118 try:
119 while 1:
120 addressManager.handle( self.socket.recv(1024) ) # self.socket.recvfrom(2**13)
121 except:
122 return "no data arrived" # not data arrived
123
124
125 def listen(ipAddr='127.0.0.1', port = 9001) :
126 """ creates a new thread listening to that port
127 defaults to ipAddr='127.0.0.1', port 9001
128 """
129 global oscThread
130 oscThread = OSCServer(ipAddr, port)
131 oscThread.start()
132
133
134 def dontListen() :
135 """ closes the socket and kills the thread
136 """
137 global oscThread 138 if oscThread :
139 oscThread.socket.close()
140 oscThread.isRunning = 0 # kill it and free the socket
141 oscThread = 0
142
143
144
145 ##########################################
146 # OLD METHOD before chris implemented threads ## in case someone wants to use it ..
147 def createListener(ipAddr='127.0.0.1', port = 9001) :
148 """ returns a blocked socket. This is part of the old system, better use now listen()
149 """
150 l = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
151
152 try :
153 l.bind( (ipAddr, port) )
154 except socket.error:
155 print 'there was an error binding to ip %s and port %i , maybe the port is already taken by another process?' % (ipAddr. port)
156 return 0
157
158 l.setblocking(0) # if not this it waits for msgs to arrive blocking other events
159 ## l.settimeout(0) # does same as line above but avobe only boolean, this takes float
160
161 return l
162
163 def getOSC(inSocket):
164 """try to get incoming OSC on the socket and send it to callback manager (for osc addresses).
165 This is part of the old system that was pulling, better use now listen()
166 """
167 try:
168 while 1:
169 addressManager.handle( inSocket.recv(1024) ) # self.socket.recvfrom(2**13)
170 except:
171 return "no data arrived" # not data arrived
172 ##########################################

Views - Today : 253 Total : 253