client/UserInterface/PythonMessenger.cpp

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);
}