View Single Post
  #1  
Old 09-13-2010, 04:00 PM
vOliver vOliver is offline
Member
 
Join Date: Sep 2010
Posts: 6
Problem with server Events

We're having a problem creating a simple server/client model where users log in and they can move around in the same world. We used the duck default model as avatars. I can paste the code in but lets see if i'm missing something obvious

The problem is with the events. Both server and client have the code
SEND = viznet.id('send')

and I then I do something in the client like

viznet.callback(SEND, update)

and this calls a function that updates the location of all the ducks. The code doesn't work because I never get something sent using the event id SEND for any of the clients. BUT, if I replace SEND with viz.NETWORK_EVENT, everything works as expected. But this is obviously problematic because it triggers on every event, and not all of the events are updates.

I tried printing out the value of UPDATE and its some crazy negative number, however it is the same number on both the server and client.

The relevant client code:
Code:
ducks = {}

UPDATE = viznet.id('update')
SEND = viznet.id('send')

def sendData():
	global UPDATE
	viznet.client.sendAll(UPDATE, client=viz.getComputerName(), ori = viz.MainView.getEuler(), pos = viz.MainView.getPosition())

def update(e):
	print 'hello'
	if e.client != viz.getComputerName():
		try:
			ducks[e.client].setPosition(e.pos)
			ducks[e.client].setEuler(e.ori)
		except KeyError:
			ducks[e.client] = viz.add('duck.wrl')
			ducks[e.client].setPosition(e.pos)
			ducks[e.client].setEuler(e.ori)

viz.callback(SEND,update)

vizact.ontimer(0.1, sendData)
and Server code:

Code:
viznet.server.start(port_in=14950, port_out=14951)

ducks = {}

UPDATE = viznet.id('update')
SEND = viznet.id('send')

def Update(e):
	ducks[e.sender].setPosition(e.pos)
	ducks[e.sender].setEuler(e.ori)

viz.callback(UPDATE, Update)

def onStartClient(e):
	print '**Client Joined:', e.sender
	ducks[e.sender] = viz.add('duck.wrl')
	
viz.callback(viznet.CLIENT_CONNECT_EVENT, onStartClient)

def onStopClient(e):
	print '** Client left:', e.sender
	ducks[e.sender].remove()

viz.callback(viznet.CLIENT_DISCONNECT_EVENT, onStopClient)
Reply With Quote