import sys, time, math, os, socket, string from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * startdir = os.getcwd() if len(sys.argv) < 4: print 'Usage: whiteboard remotehost remoteport localport' sys.exit(1) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('', string.atoi(sys.argv[3]))) sock.connect((sys.argv[1], string.atoi(sys.argv[2]))) sock.setblocking(0) myColor = 'r' otherColor = 'r' colors = { 'r': Color.Red, 'g': Color.Green, 'b': Color.Blue } windowWidth, windowHeight = 400, 400 camera = OrthoCamera(left=0, right=windowWidth, bottom=0, top=windowHeight) def draw(): time.sleep(0.002) def mousemotion(x, y): y = windowHeight - y drawPoint(myColor, x,y) data = 'draw %d %d' % (x,y) sock.send(data) def drawPoint(color, x, y): colors[color].apply() glPushMatrix() glTranslatef(x, y, 0) gluDisk(quadric, 0, 3, 8, 1) glPopMatrix() glFlush() def keyboard(key, x, y): global myColor if key == chr(27): sys.exit(0) else: myColor = key data = 'color %s' % myColor sock.send(data) def update(): global otherColor try: data = sock.recv(256) except socket.error: pass else: val = string.split(data) if val[0] == 'draw': drawPoint(otherColor, string.atoi(val[1]), string.atoi(val[2])) elif val[0] == 'color': otherColor = val[1] else: print 'unknown packet type: ', val[0] def reshape(w, h): Color.White.clear() windowWidth = w windowHeight = h camera.top = windowHeight camera.apply() glFlush() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE) glutInitWindowSize(windowWidth, windowHeight) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutMotionFunc(mousemotion) glutIdleFunc(update) glutReshapeFunc(reshape) os.chdir(startdir) quadric = gluNewQuadric() glutMainLoop()