PDA

View Full Version : Can anyone help me find out my udpServer bug.


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

HuaMuLan
09-21-2009, 07:43 AM
It seems I cann't read out the data from the port

socketServer -port 2008 -type "mel";
// SocketServer on 127.0.0.1:2008,type:mel name:Thread-1 //
// breakpoint1 //
// begin trying //
// begin while //
// start server //

CGTalk Moderation
09-21-2009, 07:43 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.