HuaMuLan
09-21-2009, 05:17 AM
My udp server can not work properly,Is there any bug in my code?
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx
import math, sys
import socket
import threading
ip_address='127.0.0.1'
kPluginCmdName=("socketClient","socketServer")
kIpFlag = "-a"
kIpLongFlag = "-address"
kPortFlag = "-p"
kPortLongFlag = "-port"
kMessageFlag = "-m"
kMessageLongFlag = "-message"
kServerTypeFlag="-t"
kServerTypeLongFlag="-type"
class ListenThread(threading.Thread):
def __init__(self,server,type):
threading.Thread.__init__(self)
self.server = server
self.type=type
def run(self):
OpenMayaMPx.MPxCommand.displayInfo('begin while')
while 1:
OpenMayaMPx.MPxCommand.displayInfo('begin trying')
try:
OpenMayaMPx.MPxCommand.displayInfo('breakpoint1')
data, addr = self.server.recvfrom(1024)
OpenMayaMPx.MPxCommand.displayInfo('breakpoint2')
melCmd='%s'%data
OpenMayaMPx.MPxCommand.displayInfo('breakpoint3')
OpenMayaMPx.MPxCommand.displayInfo('from %s >>> %s'%(addr[0],melCmd))
except:
OpenMayaMPx.MPxCommand.displayInfo('any break')
break
OpenMayaMPx.MPxCommand.displayInfo('runOut while?')
class Control(threading.Thread):
def __init__(self,host,port,type):
threading.Thread.__init__(self)
self.host=host
self.port=int(port)
self.event = threading.Event()
self.event.clear()
self.type=type
def run(self):
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1',2008))
OpenMayaMPx.MPxCommand.displayInfo ('start server')
self.lt = ListenThread(server,self.type)
self.lt.setDaemon(True)
self.lt.start()
self.event.wait()
server.close()
OpenMayaMPx.MPxCommand.displayInfo ('server off')
def stop(self):
self.event.set()
class SocketClient(OpenMayaMPx.MPxCommand):
def __init__(self):
OpenMayaMPx.MPxCommand.__init__(self)
self.__ip = ip_address
self.__port = 2008
self.__message = 'helloMaya'
def doIt(self, args):
argData = OpenMaya.MArgDatabase(self.syntax(), args)
if argData.isFlagSet(kIpFlag):
self.__ip = argData.flagArgumentString(kIpFlag, 0)
if argData.isFlagSet(kPortFlag):
self.__port = argData.flagArgumentInt(kPortFlag, 0)
if argData.isFlagSet(kMessageFlag):
self.__message = argData.flagArgumentString(kMessageFlag, 0)
try:
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
numsend = client.sendto(self.__message,(self.__ip,self.__port))
client.close()
del(client)
self.displayInfo ('succeed sendto %s %s numBytes:%s' %(self.__ip,self.__port,numsend))
except:
self.displayError('failed')
class SocketServer(OpenMayaMPx.MPxCommand):
serverList=[]
def __init__(self):
OpenMayaMPx.MPxCommand.__init__(self)
self.__ip = ip_address
self.__port = 2008
self.__type = 'msg'
def doIt(self, args):
argData = OpenMaya.MArgDatabase(self.syntax(), args)
if argData.isFlagSet(kIpFlag):
self.__ip = argData.flagArgumentString(kIpFlag, 0)
if argData.isFlagSet(kPortFlag):
self.__port = argData.flagArgumentInt(kPortFlag, 0)
if argData.isFlagSet(kServerTypeFlag):
self.__type = argData.flagArgumentString(kServerTypeFlag, 0)
if self.__type !="msg" and self.__type !="mel":
self.displayError('-type error ,mel or msg ')
return
if SocketServer.serverList.count((self.__ip,self.__port)):
self.displayError('%s:%s was listened '%(self.__ip,self.__port))
return
try:
server=Control(self.__ip,self.__port,self.__type)
name=server.getName()
server.setDaemon(True)
server.start()
SocketServer.serverList.append((self.__ip,self.__port))
self.displayInfo ('SocketServer on %s:%s,type:%s name:%s'%(self.__ip,self.__port,self.__type,name))
except:
self.displayError('failed')
def clientCreator():
return OpenMayaMPx.asMPxPtr(SocketClient())
def serverCreator():
return OpenMayaMPx.asMPxPtr(SocketServer())
def clientSyntaxCreator():
syntax = OpenMaya.MSyntax()
syntax.addFlag(kIpFlag, kIpLongFlag, OpenMaya.MSyntax.kString)
syntax.addFlag(kPortFlag, kPortLongFlag, OpenMaya.MSyntax.kLong)
syntax.addFlag(kMessageFlag, kMessageLongFlag, OpenMaya.MSyntax.kString)
return syntax
def serverSyntaxCreator():
syntax = OpenMaya.MSyntax()
syntax.addFlag(kIpFlag, kIpLongFlag, OpenMaya.MSyntax.kString)
syntax.addFlag(kPortFlag, kPortLongFlag, OpenMaya.MSyntax.kLong)
syntax.addFlag(kServerTypeFlag, kServerTypeLongFlag, OpenMaya.MSyntax.kString)
return syntax
def initializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject, "CrysyalCG Modified byHuaMuLan", "1.0", "2008")
try:
mplugin.registerCommand(kPluginCmdName[0], clientCreator, clientSyntaxCreator)
mplugin.registerCommand(kPluginCmdName[1], serverCreator, serverSyntaxCreator)
except:
sys.stderr.write("Failed to register command: %s\n" % kPluginCmdName)
raise
def uninitializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject)
try:
mplugin.deregisterCommand(kPluginCmdName[0])
mplugin.deregisterCommand(kPluginCmdName[1])
except:
sys.stderr.write("Failed to unregister command: %s\n" % kPluginCmdName)
raise
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx
import math, sys
import socket
import threading
ip_address='127.0.0.1'
kPluginCmdName=("socketClient","socketServer")
kIpFlag = "-a"
kIpLongFlag = "-address"
kPortFlag = "-p"
kPortLongFlag = "-port"
kMessageFlag = "-m"
kMessageLongFlag = "-message"
kServerTypeFlag="-t"
kServerTypeLongFlag="-type"
class ListenThread(threading.Thread):
def __init__(self,server,type):
threading.Thread.__init__(self)
self.server = server
self.type=type
def run(self):
OpenMayaMPx.MPxCommand.displayInfo('begin while')
while 1:
OpenMayaMPx.MPxCommand.displayInfo('begin trying')
try:
OpenMayaMPx.MPxCommand.displayInfo('breakpoint1')
data, addr = self.server.recvfrom(1024)
OpenMayaMPx.MPxCommand.displayInfo('breakpoint2')
melCmd='%s'%data
OpenMayaMPx.MPxCommand.displayInfo('breakpoint3')
OpenMayaMPx.MPxCommand.displayInfo('from %s >>> %s'%(addr[0],melCmd))
except:
OpenMayaMPx.MPxCommand.displayInfo('any break')
break
OpenMayaMPx.MPxCommand.displayInfo('runOut while?')
class Control(threading.Thread):
def __init__(self,host,port,type):
threading.Thread.__init__(self)
self.host=host
self.port=int(port)
self.event = threading.Event()
self.event.clear()
self.type=type
def run(self):
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1',2008))
OpenMayaMPx.MPxCommand.displayInfo ('start server')
self.lt = ListenThread(server,self.type)
self.lt.setDaemon(True)
self.lt.start()
self.event.wait()
server.close()
OpenMayaMPx.MPxCommand.displayInfo ('server off')
def stop(self):
self.event.set()
class SocketClient(OpenMayaMPx.MPxCommand):
def __init__(self):
OpenMayaMPx.MPxCommand.__init__(self)
self.__ip = ip_address
self.__port = 2008
self.__message = 'helloMaya'
def doIt(self, args):
argData = OpenMaya.MArgDatabase(self.syntax(), args)
if argData.isFlagSet(kIpFlag):
self.__ip = argData.flagArgumentString(kIpFlag, 0)
if argData.isFlagSet(kPortFlag):
self.__port = argData.flagArgumentInt(kPortFlag, 0)
if argData.isFlagSet(kMessageFlag):
self.__message = argData.flagArgumentString(kMessageFlag, 0)
try:
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
numsend = client.sendto(self.__message,(self.__ip,self.__port))
client.close()
del(client)
self.displayInfo ('succeed sendto %s %s numBytes:%s' %(self.__ip,self.__port,numsend))
except:
self.displayError('failed')
class SocketServer(OpenMayaMPx.MPxCommand):
serverList=[]
def __init__(self):
OpenMayaMPx.MPxCommand.__init__(self)
self.__ip = ip_address
self.__port = 2008
self.__type = 'msg'
def doIt(self, args):
argData = OpenMaya.MArgDatabase(self.syntax(), args)
if argData.isFlagSet(kIpFlag):
self.__ip = argData.flagArgumentString(kIpFlag, 0)
if argData.isFlagSet(kPortFlag):
self.__port = argData.flagArgumentInt(kPortFlag, 0)
if argData.isFlagSet(kServerTypeFlag):
self.__type = argData.flagArgumentString(kServerTypeFlag, 0)
if self.__type !="msg" and self.__type !="mel":
self.displayError('-type error ,mel or msg ')
return
if SocketServer.serverList.count((self.__ip,self.__port)):
self.displayError('%s:%s was listened '%(self.__ip,self.__port))
return
try:
server=Control(self.__ip,self.__port,self.__type)
name=server.getName()
server.setDaemon(True)
server.start()
SocketServer.serverList.append((self.__ip,self.__port))
self.displayInfo ('SocketServer on %s:%s,type:%s name:%s'%(self.__ip,self.__port,self.__type,name))
except:
self.displayError('failed')
def clientCreator():
return OpenMayaMPx.asMPxPtr(SocketClient())
def serverCreator():
return OpenMayaMPx.asMPxPtr(SocketServer())
def clientSyntaxCreator():
syntax = OpenMaya.MSyntax()
syntax.addFlag(kIpFlag, kIpLongFlag, OpenMaya.MSyntax.kString)
syntax.addFlag(kPortFlag, kPortLongFlag, OpenMaya.MSyntax.kLong)
syntax.addFlag(kMessageFlag, kMessageLongFlag, OpenMaya.MSyntax.kString)
return syntax
def serverSyntaxCreator():
syntax = OpenMaya.MSyntax()
syntax.addFlag(kIpFlag, kIpLongFlag, OpenMaya.MSyntax.kString)
syntax.addFlag(kPortFlag, kPortLongFlag, OpenMaya.MSyntax.kLong)
syntax.addFlag(kServerTypeFlag, kServerTypeLongFlag, OpenMaya.MSyntax.kString)
return syntax
def initializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject, "CrysyalCG Modified byHuaMuLan", "1.0", "2008")
try:
mplugin.registerCommand(kPluginCmdName[0], clientCreator, clientSyntaxCreator)
mplugin.registerCommand(kPluginCmdName[1], serverCreator, serverSyntaxCreator)
except:
sys.stderr.write("Failed to register command: %s\n" % kPluginCmdName)
raise
def uninitializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject)
try:
mplugin.deregisterCommand(kPluginCmdName[0])
mplugin.deregisterCommand(kPluginCmdName[1])
except:
sys.stderr.write("Failed to unregister command: %s\n" % kPluginCmdName)
raise
