Sirikata
|
00001 /* Sirikata 00002 * Message.hpp 00003 * 00004 * Copyright (c) 2009, Ewen Cheslack-Postava 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * * Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in 00014 * the documentation and/or other materials provided with the 00015 * distribution. 00016 * * Neither the name of Sirikata nor the names of its contributors may 00017 * be used to endorse or promote products derived from this software 00018 * without specific prior written permission. 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00021 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00022 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00023 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00024 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00026 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00027 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00028 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00029 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00030 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00031 */ 00032 00033 #ifndef _SIRIKATA_OBJECT_MESSAGE_HPP_ 00034 #define _SIRIKATA_OBJECT_MESSAGE_HPP_ 00035 00036 #include <sirikata/core/util/Platform.hpp> 00037 #include <sirikata/core/util/SpaceObjectReference.hpp> 00038 00039 #include "Message.hpp" 00040 #include "Protocol_ObjectMessage.pbj.hpp" 00041 00042 00043 namespace Sirikata { 00044 00045 typedef uint32 ObjectMessagePort; 00046 00047 // List of well known object ports. 00048 #define OBJECT_PORT_SESSION 1 00049 #define OBJECT_PORT_PROXIMITY 2 00050 #define OBJECT_PORT_LOCATION 3 00051 #define OBJECT_PORT_TIMESYNC 4 00052 #define OBJECT_SPACE_PORT 253 00053 #define OBJECT_PORT_PING 254 00054 00055 #define OBJECT_PORT_SYSTEM_RESERVED_MAX 1024 00056 #define OBJECT_PORT_SYSTEM_MAX 0xFFFFFFFF 00057 00058 #define MESSAGE_ID_SERVER_SHIFT 52 00059 #define MESSAGE_ID_SERVER_BITS 0xFFF0000000000000LL 00060 00061 SIRIKATA_FUNCTION_EXPORT Sirikata::Protocol::Object::ObjectMessage* createObjectMessage(ServerID source_server, const SpaceObjectReference& sporef_src, ObjectMessagePort src_port, const UUID& dest, ObjectMessagePort dest_port, const std::string& payload); 00062 00063 SIRIKATA_FUNCTION_EXPORT Sirikata::Protocol::Object::ObjectMessage* createObjectMessage(ServerID source_server, const UUID& src, ObjectMessagePort src_port, const UUID& dest, ObjectMessagePort dest_port, const std::string& payload); 00064 00065 00066 // Wrapper class for Protocol::Object::Message which provides it some missing methods 00067 // that are useful, e.g. size(). 00068 class SIRIKATA_EXPORT ObjectMessage : public Sirikata::Protocol::Object::ObjectMessage { 00069 public: 00070 uint32 size() { 00071 return this->ByteSize(); 00072 } 00073 00074 void serialize(std::string* result) const { 00075 serializePBJMessage(result, *this); 00076 } 00077 00078 std::string* serialize() const { 00079 return new std::string( serializePBJMessage(*this) ); 00080 }; 00081 }; // class ObjectMessage 00082 00083 // FIXME get rid of this 00084 SIRIKATA_FUNCTION_EXPORT void createObjectHostMessage(ObjectHostID source_server, const SpaceObjectReference& sporef_src, ObjectMessagePort src_port, const UUID& dest, ObjectMessagePort dest_port, const std::string& payload, ObjectMessage* result); 00085 00086 SIRIKATA_FUNCTION_EXPORT void createObjectHostMessage(ObjectHostID source_server, const UUID& src, ObjectMessagePort src_port, const UUID& dest, ObjectMessagePort dest_port, const std::string& payload, ObjectMessage* result); 00087 00088 00089 } // namespace Sirikata 00090 00091 #endif //_SIRIKATA_OBJECT_MESSAGE_HPP_