17:39
[skypekit:skypekit.git] / skypekit_2.0.0.190_29281_CB30 / examples / cpp / tutorial / step10 / tutorial_10.cpp
1 /****************************************************************************
2
3 Getting Started With SkypeKit. Tutorial Application, Step 10.
4
5 In this step we will create a html snipped that can be used to join public chats
6 by clicking on a web page.
7
8 **/
9
10 #ifdef _WIN32
11 #include "Windows.h"
12 #else
13 #include <unistd.h>
14 #endif
15
16 #include "skype-embedded_2.h"
17 #include "skype-tcp-transport.h"
18 #include "app_token.h"
19
20 using namespace Sid;
21
22 SEString inetAddr       = "127.0.0.1";
23 uint portNum            = 8963;
24
25 bool LoggedIn           = false;
26 bool LoggedOut          = false;
27
28 SEString MyAccountName;
29 SEString MyAccountPsw;
30
31 SETCPTransport* transport   = 0;
32
33
34 void debugOut(const char* out)
35 {
36     //printf("%s", out);
37 }
38
39 void Delay(int Ms)
40 {
41         #ifdef _WIN32
42                 Sleep(Ms);
43         #else
44                 sleep(Ms);
45         #endif
46 };
47
48
49 //---------------------------------------------------------------------------------------
50 // Subclassing Account
51
52 class MyAccount : public Account
53 {
54 public:
55     typedef DRef<MyAccount, Account> Ref;
56     MyAccount(unsigned int oid, SERootObject* root);
57     ~MyAccount() {};
58
59     void OnChange(int prop);
60 };
61
62 MyAccount::MyAccount(unsigned int oid, SERootObject* root) : Account(oid, root) {};
63
64 void MyAccount::OnChange(int prop)
65 {
66     if (prop == Account::P_STATUS)
67     {
68         Account::STATUS LoginStatus;
69         GetPropStatus(LoginStatus);
70         if (LoginStatus == Account::LOGGED_IN)        { LoggedIn  = true; };
71         if (LoginStatus == Account::LOGGED_OUT)       { LoggedOut = true; };
72     };
73 };
74
75
76 //---------------------------------------------------------------------------------------
77 // Subclassing Skype
78
79 class MySkype : public Skype
80 {
81 public:
82     MySkype(SETransport* transport) : Skype(transport) {}
83     ~MySkype() {}
84     Account* newAccount(int oid) {return new MyAccount(oid, this);}
85 };
86
87
88 //---------------------------------------------------------------------------------------
89 // Main
90
91 MySkype* skype = 0;
92
93 int main(int argc, char * argv[])
94 {
95     printf("*****************************************************************\n");
96     printf(" SkypeKit Tutorial, Step 10. - Creating Public Chat BLOB.\n");
97     printf("*****************************************************************\n");
98
99     if (argc < 3)
100     {
101         printf("usage: tutorial_10 <skypename> <password>\n");
102         return 0;
103     };
104
105     MyAccountName = argv[1];
106     MyAccountPsw = argv[2];
107
108     printf("Creating transport ..\n");
109     transport = new SETCPTransport(inetAddr, portNum);
110     printf("Creating skype ..\n");
111     skype = new MySkype(transport);
112     skype->log = &(debugOut);
113
114     skype->init();
115     skype->start();
116
117     printf("Submitting application token..\n");
118     skype->SetApplicationToken(AppToken);
119
120     printf("Retrieving account ..\n");
121     MyAccount::Ref A;
122
123     if (skype->GetAccount(MyAccountName, A))
124     {
125         printf("Logging in..\n");
126         A->LoginWithPassword(MyAccountPsw, false, true);
127         while (!LoggedIn) {Delay(1);};
128         printf("Loggin complete.\n");
129                 
130                 ConversationRef C;
131                 if (skype->CreateConference(C))
132                 {                       
133                         // NB! Setting chat options must be done before asking for a join BLOB.
134                         C->SetOption(Conversation::P_OPT_JOINING_ENABLED, true);
135                         C->SetOption(Conversation::P_OPT_ENTRY_LEVEL_RANK, Participant::SPEAKER);
136                         C->SetOption(Conversation::P_OPT_DISCLOSE_HISTORY, true);
137                         
138                         SEString Blob;
139                         if (C->GetJoinBlob(Blob))
140                         {
141                                 printf("You can copy&paste the following html link and use it in a web page to join Public Chat:\n\n");
142                                 printf("<a href=\"skype:?chat&blob=%s\">Click here.</a>\n\n", (const char*)Blob);
143
144                                 printf("Note that the creator of this chat - %s - needs to be online for joining to function.\n", (const char*)MyAccountName);
145                         }
146                         else 
147                         {
148                                 printf("Unable to retrieve join BLOB from conversation.\n");
149                         };
150                 }
151                 else
152                 {
153                         printf("Unable to create conversation.\n");
154                 };
155                 
156
157
158         char Ch;
159         printf("Press ENTER to quit.\n");
160         Ch = getchar();
161
162         printf("Logging out..\n");
163         A->Logout(false);
164
165         while (!LoggedOut) {Delay(1);};
166         printf("Logout complete.\n");
167     }
168     else
169     {
170         printf("Account does not exist\n");
171     };
172         
173     printf("Cleaning up.\n");
174     skype->stop();
175     skype->cleanup();
176     delete skype;
177     delete transport;
178     printf("Done.\n");
179     return 0;
180 };