![]()  | 
	
| 
		 
			 
			#1  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
			
			 
				
				Multi User Environment
			 
			
			
			i want to create a multi user environment between several users that allows them to chat and watch the same environment together. 
		
		
		
		
		
		
		
		
	
	i tried this code from vizard reference but it did not work! Server: Code: 
	import viz
import viznet
viz.go()
viz.clearcolor(.2,.2,.4)
viz.MainView.setPosition(70,45,-60)
viz.MainView.lookat(0,0,10)
objectList = ['duck.wrl','logo.wrl','vcc_male.cfg','vcc_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) # Alert other clients
    objects[e.sender].remove() # Remove object from our 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].setEuler(e.ori)
    except KeyError: # If key doesn't exist add the user's object
        objects[e.sender] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori)
        objects[e.sender].tooltip = e.sender # Sets the tool tip for this object
viz.callback(UPDATE,update)
# Tool Tip
import viztip
tth = viztip.ToolTip()
tth.start()
tth.setDelay(0)
# Chat Stuff
def updateChat(msg): # Function to update the chat display
    text.message('\n'.join(text.getMessage().split('\n')[1:])+'\n'+msg)
text = viz.addText('\n\n\n\n',viz.SCREEN) # Add to screen
text.alignment(viz.TEXT_LEFT_BOTTOM)
text.fontSize(25)
text.setPosition(.05,.08)
input = viz.addText('> _',viz.SCREEN) # Add to screen
input.fontSize(25);
input.setPosition(.032,.05)
input.visible(0) # We only want visible when in type mode
def onChat(e): # Update the message display
    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)
Code: 
	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,port_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','vcc_female.cfg']
obj_choice=viz.choose('Connected. Select your character',objectList)
def update(e):
    if e.client != viz.getComputerName():
        try:
            objects[e.client].setPosition(e.pos)
            objects[e.client].setEuler(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_disconnected)
def onStopServer(e):
    print 'Disconnected from server'
    viz.quit()
viz.callback(viznet.SERVER_DISCONNECT_EVENT,onStopServer)
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.setPosition(.05,.08)
input = viz.addText('> _',viz.SCREEN)
input.fontSize(25)
input.setPosition(.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.getComputerName(),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)
 | 
| 
		 
			 
			#2  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
		
		 
			
			Are the machines able to ping each other? Have you tried disabling any firewalls and virus scanners to see if that makes a difference?
		 
		
		
		
		
		
		
		
		
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
		
		 Quote: 
	
 i run the server code first then when i run the client code and write the server name it says "connected" and i select the character but the server does not see the client character navigating. i also tried 2 clients connected to a server but they don't see each other and the server can't see them  | 
| 
		 
			 
			#4  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
		
		 Quote: 
	
 the problem is that the characters don't appear  | 
| 
		 
			 
			#5  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
		
		 
			
			Sorry about that, there was missing code in the documentation. If you add the following to the client script does it work for you? 
		
		
		
		
		
		
		
		
	
	Code: 
	def sendUpdate(): 
    ori= viz.MainView.getEuler()
    pos = viz.MainView.getPosition()
    viznet.client.sendAll(UPDATE,client=viz.getComputerName(),object=obj_choice,pos=pos,ori=ori)
vizact.ontimer(.05,sendUpdate)
 | 
| 
		 
			 
			#6  
			
			
			
			
			
		 
		
	 | 
|||
		
		
  | 
|||
| 
		
	
		
		
			
			 Quote: 
	
 i hope vizard 4.0 documentation will get updated with this missing code.  | 
![]()  | 
	
	
		
  | 
	
		
  | 
			 
			Similar Threads
		 | 
	||||
| Thread | Thread Starter | Forum | Replies | Last Post | 
| orthographic projection in a head-tracked cave environment | michaelrepucci | Vizard | 5 | 12-14-2011 11:29 AM | 
| Controlling User Input | ohad | Vizard | 1 | 03-15-2010 06:16 PM | 
| Navigating an avatar using mouse position(2D) in 3D environment | james007 | Vizard | 1 | 10-16-2009 12:29 PM | 
| Getting a mirror to work in any environment | Frank Verberne | Vizard | 5 | 03-27-2008 09:21 AM | 
| environment maps, scenes, and you! | vadrian | Vizard | 1 | 01-12-2005 05:04 PM |