Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "srv-object.h"
00036
00037
00038
00039 namespace aesop {
00040
00041
00042 ServerObject::~ServerObject(void) throw() { }
00043
00044
00045
00046 static const char * s_cName = "_server";
00047
00048
00050
00051
00052
00054
00055
00057
00058
00059
00061
00062 class SrvObj : public ServerObject {
00063 public:
00064
00065 ~SrvObj(void) throw() { }
00066
00067
00068 void dump(void) const throw();
00069
00070
00071 void setAnimationState(IN conn_id_t ownerId,
00072 IN const char * state);
00073 const char * getAnimationState(IN conn_id_t recipient) const;
00074
00075
00076 static smart_ptr<ServerObject> create(void);
00077
00078 private:
00079
00080 SrvObj(void) throw() { }
00081
00082
00083 void initialize(void);
00084
00085
00086 std::string m_animState;
00087 conn_id_t m_animOwner;
00088 };
00089
00090
00091
00093
00094
00095
00097
00099
00100
00101
00103
00104 void
00105 SrvObj::setAnimationState
00106 (
00107 IN conn_id_t ownerId,
00108 IN const char * state
00109 )
00110 {
00111
00112 ASSERT(state, "can be empty but not null");
00113
00114 m_animOwner = ownerId;
00115 m_animState = state;
00116 }
00117
00118
00119
00120 const char *
00121 SrvObj::getAnimationState
00122 (
00123 IN conn_id_t recipient
00124 )
00125 const
00126 {
00127 if (recipient == m_animOwner)
00128 return NULL;
00129 return m_animState.c_str();
00130 }
00131
00132
00133
00135
00136
00137
00139
00140 smart_ptr<ServerObject>
00141 SrvObj::create
00142 (
00143 void
00144 )
00145 {
00146 smart_ptr<SrvObj> local = new SrvObj;
00147 ASSERT(local, "out of memory");
00148
00149 local->initialize();
00150
00151 return local;
00152 }
00153
00154
00155
00157
00158
00159
00161
00162 void
00163 SrvObj::initialize
00164 (
00165 void
00166 )
00167 {
00168 m_animOwner = 0;
00169 }
00170
00171
00172
00174
00175
00176
00178
00179 smart_ptr<ServerObject>
00180 getServerObject
00181 (
00182 IN smart_ptr<Instance>& instance
00183 )
00184 {
00185 ASSERT(instance, "null");
00186
00187 smart_ptr<ComponentData> cd = instance->getComponentData(s_cName);
00188 if (cd) {
00189 smart_ptr<ServerObject> so = cd;
00190 ASSERT_THROW(so, "server component data cannot be upcast?");
00191 return so;
00192 }
00193
00194
00195 DPRINTF("Creating server component data on the fly...");
00196 smart_ptr<ServerObject> so = SrvObj::create();
00197 ASSERT(so, "null");
00198
00199 cd = so;
00200 ASSERT(cd, "failed to downcast?");
00201 instance->setComponentData(s_cName, cd);
00202 return so;
00203 }
00204
00205
00206
00207 };
00208