Echo example does the following:
- in a supporter to supporter chat, it repeats everything you say to it, leaves when you leave
- in a customer to supporter chat, when a supporter answers the chat, it automatically joins it and repeats everything the client says, as a comment (client said: ...), stays in the chat until the customer leaves
plugin.cpp
#include <windows.h>
#include <string.h>
#include <string>
#include <islprontoapi/islpronto_plugin.h>
void chat(void *, ISLProntoChatInfo info)
{
ISLProntoStringCxx connid = ISLPronto->ConnectionInfoGetId(ISLPronto->ChatInfoAccessConnectionInfo(info));
if(!connid)
return;
ISLProntoStringCxx chatid = ISLPronto->ChatInfoGetId(info);
if(!chatid)
return;
// leave chat if no one is there to listen anymore
if(ISLPronto->ChatInfoIAmOnlyOneInChat(info)) {
ISLPronto->LeaveChat(connid.Get(), chatid.Get());
return;
}
// join client chats, when there is also another supporter
if(!ISLPronto->ChatInfoIAmMember(info)
&& ISLProntoStringCxx(ISLPronto->ChatInfoGetKey(info, ISLPRONTO_CHAT_INFO_CLIENT_CHAT)).NonEmpty())
{
if(ISLProntoStringSet users = ISLPronto->ChatInfoGetMemberUsers(info)) {
if(ISLPronto->StringSetSize(users) >= 1)
ISLPronto->JoinChat(connid.Get(), chatid.Get());
ISLPronto->FreeStringSet(users);
}
}
}
void message(void *, ISLProntoMessageInfo info)
{
// messages get resent, if network connection to chat is (re)established, ignore them
if(ISLPronto->MessageInfoIsReplay(info))
return;
// ignore my own messages
if(ISLProntoUserInfo user_info = ISLPronto->MessageInfoAccessUserInfo(info))
if(ISLPronto->UserInfoIsMyself(user_info))
return;
ISLProntoStringCxx connid = ISLPronto->ConnectionInfoGetId(ISLPronto->MessageInfoAccessConnectionInfo(info));
if(!connid)
return;
ISLProntoStringCxx chatid = ISLPronto->ChatInfoGetId(ISLPronto->MessageInfoAccessChatInfo(info));
if(!chatid)
return;
ISLProntoStringCxx text = ISLPronto->MessageInfoGetKey(info, ISLPRONTO_MESSAGE_INFO_TEXT);
if(!text || wcslen(text.AsWide()) == 0)
return;
if(ISLPRONTO_MESSAGE_TYPE_CLIENT == ISLPronto->MessageInfoGetType(info)) {
// repeat all client messages in client chats
std::wstring reply = L"client said: ";
reply += text.AsWide();
ISLProntoStringCxx reply_pronto(ISLPronto->StringFromWide(reply.c_str()));
ISLPronto->Say(connid.Get(), chatid.Get(), reply_pronto.Get(), 1);
} else if(!ISLProntoStringCxx(ISLPronto->ChatInfoGetKey(
ISLPronto->MessageInfoAccessChatInfo(info), ISLPRONTO_CHAT_INFO_CLIENT_CHAT)).NonEmpty())
{
// repeat everything in supporter chats
ISLPronto->Say(connid.Get(), chatid.Get(), text.Get(), 0);
}
}
void ISLProntoPluginStart()
{
// uncomment if you wish to debug the plugin
//ISLPronto->AttachDebugger();
ISLPronto->RegisterChatEventHandler(chat, 0);
ISLPronto->RegisterMessageEventHandler(message, 0);
}
ISLPRONTO_PLUGIN(ISLProntoPluginStart)