169 lines
4.7 KiB
C++
169 lines
4.7 KiB
C++
#include "stdafx.h"
|
|
#include "PythonMessenger.h"
|
|
|
|
void CPythonMessenger::RemoveFriend(const char * c_szKey)
|
|
{
|
|
m_FriendNameMap.erase(c_szKey);
|
|
}
|
|
|
|
void CPythonMessenger::OnFriendLogin(const char * c_szKey/*, const char * c_szName*/)
|
|
{
|
|
m_FriendNameMap.insert(c_szKey);
|
|
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogin", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_FRIEND, c_szKey));
|
|
}
|
|
|
|
void CPythonMessenger::OnFriendLogout(const char * c_szKey)
|
|
{
|
|
m_FriendNameMap.insert(c_szKey);
|
|
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogout", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_FRIEND, c_szKey));
|
|
}
|
|
|
|
void CPythonMessenger::SetMobile(const char * c_szKey, BYTE byState)
|
|
{
|
|
m_FriendNameMap.insert(c_szKey);
|
|
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnMobile", Py_BuildValue("(isi)", MESSENGER_GRUOP_INDEX_FRIEND, c_szKey, byState));
|
|
}
|
|
|
|
BOOL CPythonMessenger::IsFriendByKey(const char * c_szKey)
|
|
{
|
|
return m_FriendNameMap.end() != m_FriendNameMap.find(c_szKey);
|
|
}
|
|
|
|
BOOL CPythonMessenger::IsFriendByName(const char * c_szName)
|
|
{
|
|
return IsFriendByKey(c_szName);
|
|
}
|
|
|
|
void CPythonMessenger::AppendGuildMember(const char * c_szName)
|
|
{
|
|
if (m_GuildMemberStateMap.end() != m_GuildMemberStateMap.find(c_szName))
|
|
return;
|
|
|
|
LogoutGuildMember(c_szName);
|
|
}
|
|
|
|
void CPythonMessenger::RemoveGuildMember(const char * c_szName)
|
|
{
|
|
m_GuildMemberStateMap.erase(c_szName);
|
|
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnRemoveList", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GUILD, c_szName));
|
|
}
|
|
|
|
void CPythonMessenger::RemoveAllGuildMember()
|
|
{
|
|
m_GuildMemberStateMap.clear();
|
|
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnRemoveAllList", Py_BuildValue("(i)", MESSENGER_GRUOP_INDEX_GUILD));
|
|
}
|
|
|
|
void CPythonMessenger::LoginGuildMember(const char * c_szName)
|
|
{
|
|
m_GuildMemberStateMap[c_szName] = 1;
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogin", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GUILD, c_szName));
|
|
}
|
|
|
|
void CPythonMessenger::LogoutGuildMember(const char * c_szName)
|
|
{
|
|
m_GuildMemberStateMap[c_szName] = 0;
|
|
if (m_poMessengerHandler)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogout", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GUILD, c_szName));
|
|
}
|
|
|
|
void CPythonMessenger::RefreshGuildMember()
|
|
{
|
|
for (TGuildMemberStateMap::iterator itor = m_GuildMemberStateMap.begin(); itor != m_GuildMemberStateMap.end(); ++itor)
|
|
{
|
|
if (itor->second)
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogin", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GUILD, (itor->first).c_str()));
|
|
else
|
|
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogout", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GUILD, (itor->first).c_str()));
|
|
}
|
|
}
|
|
|
|
void CPythonMessenger::Destroy()
|
|
{
|
|
m_FriendNameMap.clear();
|
|
m_GuildMemberStateMap.clear();
|
|
}
|
|
|
|
void CPythonMessenger::SetMessengerHandler(PyObject* poHandler)
|
|
{
|
|
m_poMessengerHandler = poHandler;
|
|
}
|
|
|
|
CPythonMessenger::CPythonMessenger()
|
|
: m_poMessengerHandler(NULL)
|
|
{
|
|
}
|
|
|
|
CPythonMessenger::~CPythonMessenger()
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
PyObject * messengerRemoveFriend(PyObject* poSelf, PyObject* poArgs)
|
|
{
|
|
char * szKey;
|
|
if (!PyTuple_GetString(poArgs, 0, &szKey))
|
|
return Py_BuildException();
|
|
|
|
CPythonMessenger::Instance().RemoveFriend(szKey);
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * messengerIsFriendByName(PyObject* poSelf, PyObject* poArgs)
|
|
{
|
|
char * szName;
|
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", CPythonMessenger::Instance().IsFriendByName(szName));
|
|
}
|
|
|
|
PyObject * messengerDestroy(PyObject* poSelf, PyObject* poArgs)
|
|
{
|
|
CPythonMessenger::Instance().Destroy();
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * messengerRefreshGuildMember(PyObject* poSelf, PyObject* poArgs)
|
|
{
|
|
CPythonMessenger::Instance().RefreshGuildMember();
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * messengerSetMessengerHandler(PyObject* poSelf, PyObject* poArgs)
|
|
{
|
|
PyObject * poEventHandler;
|
|
if (!PyTuple_GetObject(poArgs, 0, &poEventHandler))
|
|
return Py_BuildException();
|
|
|
|
CPythonMessenger::Instance().SetMessengerHandler(poEventHandler);
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
void initMessenger()
|
|
{
|
|
static PyMethodDef s_methods[] =
|
|
{
|
|
{ "RemoveFriend", messengerRemoveFriend, METH_VARARGS },
|
|
{ "IsFriendByName", messengerIsFriendByName, METH_VARARGS } ,
|
|
{ "Destroy", messengerDestroy, METH_VARARGS },
|
|
{ "RefreshGuildMember", messengerRefreshGuildMember, METH_VARARGS },
|
|
{ "SetMessengerHandler", messengerSetMessengerHandler, METH_VARARGS },
|
|
{ NULL, NULL, NULL },
|
|
};
|
|
|
|
Py_InitModule("messenger", s_methods);
|
|
}
|