init
This commit is contained in:
168
src/UserInterface/PythonMessenger.cpp
Normal file
168
src/UserInterface/PythonMessenger.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user