diff --git a/pyogp/lib/base/data/__init__.py b/pyogp/lib/base/data/__init__.py index b5953a5..1536705 100644 --- a/pyogp/lib/base/data/__init__.py +++ b/pyogp/lib/base/data/__init__.py @@ -1,3 +1,4 @@ -from pkg_resources import resource_stream +from pkg_resources import resource_stream, resource_string msg_tmpl = resource_stream(__name__, 'message_template.msg') +msg_details = resource_string(__name__, 'message.xml') diff --git a/pyogp/lib/base/data/message.xml b/pyogp/lib/base/data/message.xml new file mode 100644 index 0000000..701d049 --- /dev/null +++ b/pyogp/lib/base/data/message.xml @@ -0,0 +1,560 @@ + + + + serverDefaults + + + simulator + template + + spaceserver + template + + dataserver + template + + logDataserver + template + + inventoryDataserver + template + + rpcserver + template + + mapserver + template + + viewer + template + + + messages + + + + PacketAck + + flavor + template + trusted-sender + false + + + OpenCircuit + + flavor + template + trusted-sender + false + + + CloseCircuit + + flavor + template + trusted-sender + false + + + StartPingCheck + + flavor + template + trusted-sender + false + + + CompletePingCheck + + flavor + template + trusted-sender + false + + + AddCircuitCode + + flavor + template + trusted-sender + true + + + UseCircuitCode + + flavor + template + trusted-sender + false + + + CreateTrustedCircuit + + flavor + template + trusted-sender + false + + + RequestTrustedCircuit + + flavor + template + trusted-sender + true + + + + ReportAutosaveCrash + + flavor + template + trusted-sender + false + + + SetCPURatio + + flavor + template + trusted-sender + false + + + + CompleteAgentMovement + + flavor + template + trusted-sender + false + + + EconomyDataRequest + + flavor + template + trusted-sender + false + + + ViewerEffect + + flavor + template + trusted-sender + false + + + RegionHandshakeReply + + flavor + template + trusted-sender + false + + + + AgentUpdate + + flavor + template + trusted-sender + false + + + + ImagePacket + + flavor + template + trusted-sender + false + + + LayerData + + flavor + template + trusted-sender + false + + + ObjectUpdateCached + + flavor + template + trusted-sender + false + + + ObjectUpdateCompressed + + flavor + template + trusted-sender + false + + + ObjectUpdate + + flavor + template + trusted-sender + false + + + ImprovedTerseObjectUpdate + + flavor + template + trusted-sender + false + + + AvatarAnimation + + flavor + template + trusted-sender + false + + + AvatarAppearance + + flavor + template + trusted-sender + false + + + EdgeDataPacket + + flavor + template + trusted-sender + true + + + CoarseLocationUpdate + + flavor + template + trusted-sender + true + only-send-latest + true + + + SimulatorLoad + + flavor + template + trusted-sender + true + + + EstablishAgentCommunication + + flavor + llsd + trusted-sender + true + + + AgentGroupDataUpdate + + flavor + llsd + trusted-sender + true + + + AgentDropGroup + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionStartReply + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionEventReply + + flavor + llsd + trusted-sender + true + + + ForceCloseChatterBoxSession + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionAgentListUpdates + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionUpdate + + flavor + llsd + trusted-sender + true + + + ChatterBoxInvitation + + flavor + llsd + trusted-sender + true + + + + ParcelVoiceInfoRequest + + flavor + llsd + trusted-sender + false + + + + ParcelVoiceInfo + + flavor + llsd + trusted-sender + true + + + ParcelProperties + + flavor + llsd + trusted-sender + true + + + avatarnotesrequest + + service_name + avatar-notes + builder + template + trusted-sender + false + + + avatarclassifiedsrequest + + service_name + avatar-classifieds + builder + template + trusted-sender + false + + + avatarpicksrequest + + service_name + avatar-pick + builder + template + trusted-sender + false + + + pickinforequest + + service_name + pick-info + builder + template + trusted-sender + false + + + ProvisionVoiceAccountRequest + + flavor + llsd + trusted-sender + false + + + + RequiredVoiceVersion + + flavor + llsd + trusted-sender + true + + + + ScriptRunningReply + + flavor + llsd + trusted-sender + false + + + StartGroupProposal + + flavor + llsd + trusted-sender + false + + + FetchInventoryDescendents + + flavor + template + trusted-sender + false + + + GroupProposalBallot + + flavor + llsd + trusted-sender + false + + + + capBans + + MapLayer + false + + MapLayerGod + false + + NewFileAgentInventory + false + + UpdateGestureAgentInventory + false + + UpdateNotecardAgentInventory + false + + UpdateScriptAgentInventory + true + + UpdateGestureTaskInventory + false + + UpdateNotecardTaskInventory + true + + UpdateScriptTaskInventory + true + + ViewerStartAuction + true + + ParcelGodReserveForNewbie + true + + SendUserReport + false + + SendUserReportWithScreenshot + false + + RequestTextureDownload + true + + EventQueueGet + false + + UntrustedSimulatorMessage + false + + SendPostcard + false + + SendPostcard2 + true + + SendPostcard3 + true + + ParcelVoiceInfoRequest + false + + ChatSessionRequest + false + + ProvisionVoiceAccountRequest + false + + RemoteParcelRequest + false + + SearchStatTracking + false + + ParcelPropertiesUpdate + false + + EstateChangeInfo + true + + FetchInventoryDescendents + true + + + messageBans + + trusted + + + + untrusted + + + + + maxQueuedEvents + 100 + + diff --git a/pyogp/lib/base/message/message_dict.py b/pyogp/lib/base/message/message_dict.py new file mode 100644 index 0000000..e1be508 --- /dev/null +++ b/pyogp/lib/base/message/message_dict.py @@ -0,0 +1,41 @@ +from indra.base import llsd + +class MessageDictionary(object): + def __init__(self, message_details): + if message_details == None: + raise Exception('Details file null') + #all the details of the file + self.message_details = {} + #only concerning messages + self.message_dict = {} + + self.buildDictionary(message_details) + + def buildDictionary(self, message_details): + self.message_details = llsd.parse(message_details) + message_dict = self.message_details['messages'] + for message in message_dict: + self.message_dict[message] = message_dict[message] + + def get_message(self, message_name): + if message_name in self.message_dict: + return self.message_dict[message_name] + + return None + + def get_message_flavor(self, message_name): + message = self.get_message(message_name) + if message == None: + return None + + return message['flavor'] + + def get_trusted_sender(self, message_name): + message = self.get_message(message_name) + if message == None: + return None + + return message['trusted-sender'] + + def __getitem__(self, i): + return self.get_message(i) diff --git a/pyogp/lib/base/message/message_system.py b/pyogp/lib/base/message/message_system.py index bddd470..23087ce 100644 --- a/pyogp/lib/base/message/message_system.py +++ b/pyogp/lib/base/message/message_system.py @@ -1,15 +1,19 @@ from zope.component import getGlobalSiteManager gsm = getGlobalSiteManager() -from pyogp.lib.base.data import msg_tmpl +from pyogp.lib.base.data import msg_tmpl, msg_details from pyogp.lib.base.message.message_llsd_builder import LLSDMessageBuilder from pyogp.lib.base.message.message_template_parser import MessageTemplateParser from pyogp.lib.base.message.message_template_builder import MessageTemplateBuilder from pyogp.lib.base.message.message_template_reader import MessageTemplateReader from pyogp.lib.base.message.message_template_dict import TemplateDictionary +from pyogp.lib.base.message.message_dict import MessageDictionary class MessageSystem(object): - def __init__(): + def __init__(self): + #holds the details of the message, or how the messages should be sent, + #built, and read + self.message_details = None self.builder = None self.reader = None self.circuit_info = None @@ -18,15 +22,16 @@ class MessageSystem(object): self.llsd_builder = LLSDMessageBuilder() #self.llsd_reader = LLSDMessageReader() - template_dict = self.load_template(msg_tmpl) - self.template_builder = MessageTemplateBuilder(template_dict) - self.template_reader = MessageTemplateReader(template_dict) + self.message_dict, template_dict = self.load_template(msg_tmpl, msg_details) + self.template_builder = MessageTemplateBuilder(template_dict) + self.template_reader = MessageTemplateReader(template_dict) - def load_template(self, template_file): + def load_template(self, template_file, details_file): #use the parser to load the message_template.msg message templates parser = MessageTemplateParser(msg_tmpl) template_list = parser.message_templates - return TemplateDictionary(self.template_list) + + return MessageDictionary(details_file), TemplateDictionary(template_list) def receive_check(self): #determine if we have any messages that can be received through UDP diff --git a/pyogp/lib/base/tests/test_message_system.py b/pyogp/lib/base/tests/test_message_system.py new file mode 100644 index 0000000..6569892 --- /dev/null +++ b/pyogp/lib/base/tests/test_message_system.py @@ -0,0 +1,24 @@ +#standard libraries +import unittest, doctest +import pprint + +#local libraries +from pyogp.lib.base.message.message_system import MessageSystem + +class TestMessageSystem(unittest.TestCase): + + def tearDown(self): + pass + + def setUp(self): + self.message_system = MessageSystem() + + def test_init(self): + assert self.message_system.message_dict.get_message_flavor('UseCircuitCode') \ + == 'template', "Parsing message.xml failed" + +def test_suite(): + from unittest import TestSuite, makeSuite + suite = TestSuite() + suite.addTest(makeSuite(TestMessageSystem)) + return suite