/home/tetron/hack/vos/apps/tutorials/vostut3server.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <vos/vos/vos.hh>
00013
00014 using namespace VUtil;
00015 using namespace VOS;
00016
00017 #ifdef WIN32
00018 #define sleep _sleep
00019 #endif
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 class TutorialMessageHandler : public VobjectExtension
00030 {
00031 private:
00032 vRef<Vobject> primus;
00033 public:
00034 TutorialMessageHandler(Vobject* p);
00035 void handleSampleMessage(Message* msg);
00036 };
00037
00038
00039 int main(int argc, char** argv)
00040 {
00041 std::cout << "VOS Tutorial 3 Server\n\n";
00042
00043 Site localsite;
00044 localsite.addSiteExtension(new LocalVipSiteExtension());
00045 localsite.setDefaultPolicy("core:accept-all");
00046
00047 vRef<Vobject> primus = localsite.createVobjectA("primus");
00048
00049
00050
00051
00052
00053 vRef<Site> site = primus->getSite();
00054 std::cout << "vostut3server: Vobject site name is: " << primus->getSiteName() << "\n";
00055 std::cout << "vostut3server: Vobject URL is: " << primus->getURLstr() << "\n";
00056 std::cout << "vostut3server: Vobject site is: " << site->getURLstr() << "\n";
00057 std::cout << "vostut3server: Our local site is: " << localsite.getURLstr() << "\n";
00058
00059
00060
00061 std::cout << "vostut3server: Primus is local? " << (primus->isLocal() ? "yes" : "no") << "\n";
00062 std::cout << "vostut3server: Primus is remote? " << (primus->isRemote() ? "yes" : "no") << "\n";
00063
00064
00065
00066
00067 TutorialMessageHandler* tmh = new TutorialMessageHandler(primus);
00068
00069
00070
00071
00072
00073
00074
00075 primus->getVobjectBase()->addVobjectExtension(tmh);
00076
00077
00078
00079 while(true) sleep(1000);
00080 }
00081
00082
00083 TutorialMessageHandler::TutorialMessageHandler(Vobject* p)
00084 {
00085
00086
00087
00088
00089
00090
00091
00092
00093 primus.assign(p, true);
00094
00095
00096
00097
00098
00099
00100
00101 static bool init = true;
00102 if(init) {
00103 init = false;
00104 VobjectBase::addMessageHandler("tutorial:hello", &TutorialMessageHandler::handleSampleMessage);
00105 }
00106 }
00107
00108 void TutorialMessageHandler::handleSampleMessage(Message* msg)
00109 {
00110
00111 std::cout << "vostut3server: "
00112 << primus->getSiteName()
00113 << " received a message:\n"
00114 << msg->getFormattedString() << "\n";
00115
00116
00117
00118 std::cout << "Method is: " << msg->getMethod() << "\n";
00119
00120
00121
00122 std::cout << "vostut3server: The object " << msg->getFrom() << " said hello to us! Isn't that nice.\n";
00123
00124 try {
00125
00126
00127
00128
00129
00130
00131 std::cout << "vostut3server: The word of the day is \""
00132 << msg->getField("word")->value << "\"\n";
00133
00134 } catch(NoSuchFieldError) {
00135
00136
00137 std::cout << "vostut3server: Oops, no \"word\" field is present, no word of the day for us.\n";
00138 }
00139
00140 std::cout << "vostut3server: The fields in this message are:\n";
00141
00142
00143
00144
00145 for(int i = 0; i < msg->numFields(); i++) {
00146 std::cout << " " << i << " " << msg->getField(i)->key
00147 << "=\""
00148 << msg->getField(i)->value
00149 << "\"\n";
00150 }
00151 }