![]() |
|
#8
|
|||
|
|||
|
Client Server Networking problem
Sorry about posting this thread in the wrong place.
Here is the code I am using: SERVER SERVER SERVER SERVER: import viz import viznet viz.go() viz.clearcolor(.2,.2,.4) view = viz.get(viz.MAIN_VIEWPOINT) view.setPosition(70,45,-60) view.lookat(0,0,10) objectList = ['duck.wrl', 'logo.wrl', 'male.cfg', 'female.cfg' ] maze = viz.add('tankmaze.wrl') objects = {} UPDATE = viznet.id('update') CLIENT_DISCONNECTED = viznet.id('client_disconnected') CHAT = viznet.id('chat') viznet.server.start(port_in=14950, port_out = 14951) def onStartClient(e): print '** Client joined:', e.sender viz.callback(viznet.CLIENT_CONNECT_EVENT, onStartClient) def onStopClient(e): print '** Client left:', e.sender viznet.server.send(CLIENT_DISCONNECTED, client=e.sender) objects[e.sender].remove() #Remove object from map del objects[e.sender] #Delete user from array viz.callback(viznet.CLIENT_DISCONNECT_EVENT, onStopClient) def update(e): try: objects[e.sender].setPosition(e.pos) objects[e.sender].rotate(e.ori) except KeyError: objects[e.sender] = viz.add(objectList[e.object],scale= 2,2,2],pos=e.pos,euler=e.ori) objects[e.sender].tooltip = e.sender viz.callback(UPDATE, update) import viztip tth = viztip.ToolTip() tth.start() tth.setDelay(0) def updateChat(msg): text.message('\n'.join(text.getMessage().split('\n ')[1:])+'\n'+msg) text = viz.addText('\n\n\n\n', viz.SCREEN) # send 4 carriage returns to screen text.alignment(viz.TEXT_LEFT_BOTTOM) text.fontSize(25) text.translate(0.05,0.08) input = viz.addText('>_', viz.SCREEN) # Add Chat prompt input.alignment(viz.TEXT_LEFT_BOTTOM) input.fontSize(25) input.translate(0.032,0.05) input.visible(0) #Only visible when in type mode def onChat(e): updateChat(e.client+': '+e.chat) viz.callback(CHAT,onChat) talking = False def onKeyDown(key): global talking if key == 'y' and not talking: # Start talking mode talking = True input.message('> _') input.visible(1) elif key == viz.KEY_ESCAPE and talking: # Exit talking mode talking = False input.visible(0) return True elif talking and key == viz.KEY_RETURN: # Send message talking = False viznet.server.send(CHAT,client='SERVER',chat=input .getMessage()[2:-1]) input.visible(0) # Update display with our message updateChat('SERVER'+': '+input.getMessage()[2:-1]) elif talking and key == viz.KEY_BACKSPACE: # Delete a character if len(input.getMessage()) > 3: input.message(input.getMessage()[:-2]+'_') elif len(key) > 1: # Handle special keys return False elif talking and 32 <= ord(key) <= 126: # Input message input.message(input.getMessage()[:-1]+key+'_') viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6) CLIENT CLIENT CLIENT CLIENT import viz import viznet import vizinfo viz.go() viz.clearcolor(.2,.2,.4) maze = viz.add('tankmaze.wrl') objects = {} SEND_UPDATE_TIMER = 1 UPDATE = viznet.id('update') CLIENT_DISCONNECTED = viznet.id('client_disconnected') CHAT = viznet.id('chat') SERVER_NAME=viz.input('Enter Server Name') while not viznet.client.connect(SERVER_NAME,port_in=14951,po rt_out=14950): if viz.ask('Could not connect to ' + SERVER_NAME + ' would you like to try another?'): SERVER_NAME=viz.input('Enter Server Name') else: viz.quit() break objectList = ['duck.wrl','logo.wrl','male.cfg','female.cfg'] obj_choice=viz.choose('Connected. Select your character',objectList) def mytimer(num): if num == SEND_UPDATE_TIMER: ori= viz.get(viz.HEAD_ORI) pos = viz.get(viz.HEAD_POS) viznet.client.sendAll(UPDATE,client=viz.getCompute rName (),object=obj_choice,pos=pos,ori=ori) viz.callback(viz.TIMER_EVENT, mytimer) viz.starttimer(SEND_UPDATE_TIMER, .05, -1) def update(e): if e.client != viz.getComputerName(): try: objects[e.client].setPosition(e.pos) objects[e.client].rotate(e.ori) except KeyError: objects[e.client] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori) objects[e.client].tooltip = e.client viz.callback(UPDATE,update) def client_disconnected(e): objects[e.client].remove() del objects[e.client] viz.callback(CLIENT_DISCONNECTED,client_disconnect ed) def onStopServer(e): print 'Disconnected from server' viz.quit() viz.callback(viznet.SERVER_DISCONNECT_EVENT,onStop Server) import viztip tth = viztip.ToolTip() tth.start() tth.setDelay(0) def updateChat(msg): text.message('\n'.join(text.getMessage().split('\n ')[1:])+'\n'+msg) text = viz.addText('\n\n\n\n',viz.SCREEN) text.alignment(viz.TEXT_LEFT_BOTTOM) text.fontSize(25) text.translate(.05,.08) input = viz.addText('> _',viz.SCREEN) input.fontSize(25) input.translate(.032,.05) input.visible(0) def onChat(e): updateChat(e.client+': '+e.chat) viz.callback(CHAT,onChat) talking = False def onKeyDown(key): global talking if key == 'y' and not talking: talking = True input.message('> _') input.visible(1) elif key == viz.KEY_ESCAPE and talking: talking = False input.visible(0) return True elif talking and key == viz.KEY_RETURN: talking = False viznet.client.sendAll(CHAT,client=viz.getComputerN ame(),chat=input.getMessage()[2:-1]) input.visible(0) elif talking and key == viz.KEY_BACKSPACE: if len(input.getMessage()) > 3: input.message(input.getMessage()[:-2]+'_') elif len(key) > 1: return False elif talking and 32 <= ord(key) <= 126: input.message(input.getMessage()[:-1]+key+'_') viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6) |
|
|