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-15 22:51:11 (GMT)
committer Simon Schampijer <simon@schampijer.de>2006-11-15 22:51:11 (GMT)
commit3f0f9b40407d50585936a434b6fb17c5b5fe4d50 (patch)
tree517dbee5410215544fc820d429491ee5f42f3c47
parent29a66d8c5167563d5409893c3407adcd7ec68c4f (diff)
Fix that several memosonos can be opened.
-rw-r--r--activity/activity.info2
-rwxr-xr-xmemosono.py47
2 files changed, 35 insertions, 14 deletions
diff --git a/activity/activity.info b/activity/activity.info
index dab236c..f6570a3 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,4 +3,4 @@ name = Memosono
service_name = com.erikos.MemosonoActivity
exec = sugar-activity-factory com.erikos.MemosonoActivity memosono.MemosonoActivity
icon = activity-memorygame
-activity_version = 4
+activity_version = 5
diff --git a/memosono.py b/memosono.py
index 6fa7761..dfe5689 100755
--- a/memosono.py
+++ b/memosono.py
@@ -29,12 +29,14 @@ import popen2
import random
import copy
import time
+import errno
from sugar.activity.Activity import Activity
class Server:
- def __init__(self, _MEMO):
- self.oscapi = OscApi()
- self.oscrecv = self.oscapi.createListener('127.0.0.1', 7000)
+ def __init__(self, _MEMO, port):
+ self.oscapi = OscApi()
+ self.oscrecv = self.oscapi.createListener('127.0.0.1', port)
+
gobject.io_add_watch(self.oscrecv, gobject.IO_IN, self._handle_query)
self.oscapi.bind(self._tile, '/MEMO/tile')
self.compkey = ''
@@ -43,8 +45,8 @@ class Server:
self.comtile = 0
self.match = 0
self.addresses = {}
- self.addresses['eva'] = ['127.0.0.1', 7001]
- self.addresses['simon'] = ['127.0.0.1', 7002]
+ self.addresses['eva'] = ['127.0.0.1', port+1]
+ self.addresses['simon'] = ['127.0.0.1', port+2]
self.players = ['eva', 'simon']
self.currentplayer = 0
self.lastplayer = 0
@@ -129,15 +131,15 @@ class Controler(gobject.GObject):
gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
}
- def __init__(self, _MEMO):
+ def __init__(self, _MEMO, port):
gobject.GObject.__init__(self)
self._MEMO = _MEMO
self.sound = 0
# OSC-communication
self.oscapi = OscApi()
- self.replyaddr = (('127.0.0.1', 7000))
- self.serveraddr = (('127.0.0.1', 7000))
- self.oscrecv = self.oscapi.createListener('127.0.0.1', 7001)
+ 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)
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')
@@ -483,8 +485,6 @@ class MemosonoActivity(Activity):
def __init__(self):
Activity.__init__(self)
self.connect('destroy', self._cleanup_cb)
- self.connect('focus_in_event', self._focus_in)
- self.connect('focus_out_event', self._focus_out)
self.gamename = 'test'
self.set_title("Memosono - "+self.gamename)
@@ -506,8 +506,26 @@ 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.controler = Controler(_MEMO, self.port)
+ self.server = Server(_MEMO, self.port)
self.model = Model(grid)
self.view = View(self.controler, self, _MEMO)
@@ -523,8 +541,11 @@ class MemosonoActivity(Activity):
self.model.connect('nextm', self.view._next)
self.controler.connect('updatepointsc', self.model._updatepoints)
self.model.connect('updatepointsm', self.view._updatepoints)
+ # connect to the in/out events of the memosono activity
+ self.connect('focus_in_event', self._focus_in)
+ self.connect('focus_out_event', self._focus_out)
+
- self.server = Server(_MEMO)
self.controler.init_game(name_creator, _MEMO['_NUM_PLAYERS'], self.gamename)
i = 0
while(i < _MEMO['_NUM_GRIDPOINTS']):