Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2006-11-16 08:48:19 (GMT)
committer Simon Schampijer <simon@schampijer.de>2006-11-16 08:48:19 (GMT)
commit1c29fca2f8423a71fa5759cc70df57b752656d70 (patch)
treef6f539ba2d14fc7888165347ec70d028e4ca61ef
parent3f0f9b40407d50585936a434b6fb17c5b5fe4d50 (diff)
Improved the fix of the several memosono instances.
-rwxr-xr-xmemosono.py45
-rwxr-xr-xosc/oscAPI.py21
2 files changed, 37 insertions, 29 deletions
diff --git a/memosono.py b/memosono.py
index dfe5689..4ac1d10 100755
--- a/memosono.py
+++ b/memosono.py
@@ -34,19 +34,21 @@ from sugar.activity.Activity import Activity
class Server:
def __init__(self, _MEMO, port):
- self.oscapi = OscApi()
- self.oscrecv = self.oscapi.createListener('127.0.0.1', port)
-
+ self.oscapi = OscApi()
+ self.port = 0
+ self.oscrecv, self.port = self.oscapi.createListener('127.0.0.1', port)
+ logging.debug(" Memosono-Server has port "+str(self.port) )
gobject.io_add_watch(self.oscrecv, gobject.IO_IN, self._handle_query)
self.oscapi.bind(self._tile, '/MEMO/tile')
+ self.oscapi.bind(self._connect, '/MEMO/connect')
self.compkey = ''
self.key = ''
self.tile = 0
self.comtile = 0
self.match = 0
self.addresses = {}
- self.addresses['eva'] = ['127.0.0.1', port+1]
- self.addresses['simon'] = ['127.0.0.1', port+2]
+ self.addresses['eva'] = []
+ self.addresses['simon'] = []
self.players = ['eva', 'simon']
self.currentplayer = 0
self.lastplayer = 0
@@ -59,7 +61,11 @@ class Server:
self.oscapi.recvhandler(data, address)
return True
-# OSC-METHODS:
+# OSC-METHODS:
+ def _connect(self, *msg):
+ self.addresses['eva'] = [msg[1][0], int(msg[1][1])]
+ self.addresses['simon'] = [msg[1][0], int(msg[1][1])+1]
+
def _tile(self, *msg):
self.tile = msg[0][2]
self.key = msg[0][3]
@@ -137,9 +143,12 @@ class Controler(gobject.GObject):
self.sound = 0
# OSC-communication
self.oscapi = OscApi()
+ self.port = 0
self.replyaddr = (('127.0.0.1', port))
self.serveraddr = (('127.0.0.1', port))
- self.oscrecv = self.oscapi.createListener('127.0.0.1', port+1)
+ self.oscrecv, self.port = self.oscapi.createListener('127.0.0.1', port+1)
+ logging.debug(" Memosono-Client has port "+str(self.port) )
+ self.oscapi.sendMsg("/MEMO/connect", [self.port], self.serveraddr[0], self.serveraddr[1])
gobject.io_add_watch(self.oscrecv, gobject.IO_IN, self._handle_query)
self.oscapi.bind(self._addplayer, '/MEMO/addplayer')
self.oscapi.bind(self._game_init, '/MEMO/init')
@@ -507,25 +516,9 @@ class MemosonoActivity(Activity):
_MEMO['_NUM_PLAYERS'] = 2
name_creator = 'eva'
- sock_check = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- self.port = 7000
- i=0
- while i < 5:
- try:
- sock_check.bind(('127.0.0.1', self.port))
- logging.debug(" Memosono-Server has port "+str(self.port) )
- i = 5
- except socket.error:
- if errno.EADDRINUSE:
- logging.debug(" Port in use. Try another one. "+str(self.port))
- self.port+=1000
- i+=1
- if i is 5:
- logging.debug(" No free port found. Memosono will NOT work.")
- sock_check.close()
-
- self.controler = Controler(_MEMO, self.port)
- self.server = Server(_MEMO, self.port)
+ self.server = Server(_MEMO, 7000)
+ self.controler = Controler(_MEMO, self.server.port)
+
self.model = Model(grid)
self.view = View(self.controler, self, _MEMO)
diff --git a/osc/oscAPI.py b/osc/oscAPI.py
index 00979ac..1ead1e8 100755
--- a/osc/oscAPI.py
+++ b/osc/oscAPI.py
@@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import OSC
import socket
+import errno
class OscApi:
def __init__(self):
@@ -32,9 +33,23 @@ class OscApi:
def createListener(self, ipAddr, port):
"""create and return an inbound socket
"""
- self.ioSocket.bind((ipAddr, port))
- self.ioSocket.setblocking(0) # if not waits for msgs to arrive blocking other events
- return self.ioSocket
+ i=0
+ while i < 10:
+ try:
+ self.ioSocket.bind(('127.0.0.1', port))
+ #logging.debug(" Memosono-Server has port "+str(self.port) )
+ i = 10
+ except socket.error:
+ if errno.EADDRINUSE:
+ #logging.debug(" Port in use. Try another one. "+str(port))
+ port+=1
+ i+=1
+ if i is 10:
+ #logging.debug(" No free port found. Memosono will NOT work.")
+ self.ioSocket.bind((ipAddr, port))
+
+ self.ioSocket.setblocking(0) # if not waits for msgs to arrive blocking other events
+ return (self.ioSocket, port)
def bind(self, func, oscaddress):
""" bind certains oscaddresses with certain functions in address manager