int NFCWorldNet_ServerModule::OnRefreshProxyServerInfoProcess(const NFIPacket& msg)
{
    NFIDENTID nPlayerID;
    NFMsg::ServerInfoReportList xMsg;
    if (!RecivePB(msg, xMsg, nPlayerID))
    {
        return 0;
    }

    for (int i = 0; i < xMsg.server_list_size(); ++i)
    {
        NFMsg::ServerInfoReport* pData = xMsg.mutable_server_list(i);
        NF_SHARE_PTR<ServerData> pServerData =  mProxyMap.GetElement(pData->server_id());
        if (!pServerData.get())
        {
            pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData());
            mGameMap.AddElement(pData->server_id(), pServerData);
        }

        pServerData->nFD = msg.GetFd();
        *(pServerData->pData) = *pData;

        m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFIDENTID(0, pData->server_id()), pData->server_name(), "Proxy Registered");

        SynGameToProxy(msg.GetFd());
    }

    return 0;
}
int NFCLoginNet_ServerModule::OnReciveClientPack(const NFIPacket& msg )
{
	//统一解包
	int nMsgID = msg.GetMsgHead()->GetMsgID();
	switch (nMsgID)
	{

	case NFMsg::EGameMsgID::EGMI_REQ_LOGIN:
		OnLoginProcess(msg);
		break;

	case NFMsg::EGameMsgID::EGMI_REQ_LOGOUT:
		break;

	case NFMsg::EGameMsgID::EGMI_REQ_CONNECT_WORLD:
		OnSelectWorldProcess(msg);
		break;
		
	case NFMsg::EGameMsgID::EGMI_REQ_WORLD_LIST:
		OnViewWorldProcess(msg);
		break;

		// 	case NFMsg::EGameMsgID::EGMI_ACK_CONNECT_WORLD:
		// 		OnObjectPropertyIntProcess(msg);
		// 		break;



	default:
		printf("NFNet || 非法消息:unMsgID=%d\n", nMsgID);
		break;
	}
	return 0;
}
int NFCLoginNet_ServerModule::OnSelectWorldProcess( const NFIPacket& msg )
{
	NFIDENTID nPlayerID;
	NFMsg::ReqConnectWorld xMsg;
	if (!RecivePB(msg, xMsg, nPlayerID))
	{
		return 0;
	}

	NetObject* pNetObject = GetNet()->GetNetObject(msg.GetFd());
	if (!pNetObject)
	{
		return 0;
	}

	//没登录过
	if (pNetObject->GetConnectKeyState() <= 0)
	{
		return 0;
	}

	NFCDataList val;
	val << xMsg.world_id() << pNetObject->GetClientID() << pPluginManager->AppID() << pNetObject->GetAccount();
	m_pEventProcessModule->DoEvent(NFIDENTID(), NFED_ON_CLIENT_SELECT_SERVER, val);

	return 0;
}
int NFCWorldNet_ServerModule::OnRecivePack( const NFIPacket& msg )
{
    switch (msg.GetMsgHead()->GetMsgID())
    {
        case NFMsg::EGameMsgID::EGMI_PTWG_PROXY_REFRESH:
            OnRefreshProxyServerInfoProcess(msg);
            break;

        case NFMsg::EGameMsgID::EGMI_PTWG_PROXY_REGISTERED:
            OnProxyServerRegisteredProcess(msg);
            break;

        case NFMsg::EGameMsgID::EGMI_PTWG_PROXY_UNREGISTERED:
            OnProxyServerUnRegisteredProcess(msg);
            break;

        case NFMsg::EGameMsgID::EGMI_GTW_GAME_REGISTERED:
            OnGameServerRegisteredProcess(msg);
            break;

        case NFMsg::EGameMsgID::EGMI_GTW_GAME_UNREGISTERED:
            OnGameServerUnRegisteredProcess(msg);
            break;

        case NFMsg::EGameMsgID::EGMI_GTW_GAME_REFRESH:
            OnRefreshGameServerInfoProcess(msg);
            break;
        default:
            break;
    }
    return 0;
}
예제 #5
0
bool NFCNet::SendMsgToAllClient( const NFIPacket& msg )
{
    std::map<int, NetObject*>::iterator it = mmObject.begin();
    for (; it != mmObject.end(); ++it)
    {
        NetObject* pNetObject = (NetObject*)it->second;
        if (pNetObject && !pNetObject->GetRemoveState())
        {
            bufferevent* bev = pNetObject->GetBuffEvent();
            if (NULL != bev)
            {
                bufferevent_write(bev, msg.GetPacketData(), msg.GetPacketLen());
            }
        }
    }

    return true;
}
int NFCWorldToMasterModule::OnReciveMSPack( const NFIPacket& msg )
{
	int nMsgID = msg.GetMsgHead()->GetMsgID();
	switch (nMsgID)
	{
	case NFMsg::EGameMsgID::EGMI_REQ_CONNECT_WORLD:
		OnSelectServerProcess(msg);
		break;

	case NFMsg::EGameMsgID::EGMI_REQ_KICK_CLIENT_INWORLD:
		OnKickClientProcess(msg);
		break;

	default:
		printf("NFNet || 非法消息:unMsgID=%d\n", msg.GetMsgHead()->GetMsgID());
		break;
	}

	return 0;
}
int NFCGameServerToWorldModule::TransPBToProxy( const NFIPacket& msg )
{
    NFIDENTID nPlayerID;
    std::string strData;
    if (!NFINetModule::RecivePB(msg, strData, nPlayerID))
    {
        return 0;
    }

    m_pGameServerNet_ServerModule->SendMsgPBToGate(msg.GetMsgHead()->GetMsgID(), strData, nPlayerID);

    return 0;
}
int NFCGameServerToWorldModule::OnAckLeaveGuildProcess( const NFIPacket& msg )
{
    NFIDENTID nPlayerID;
    NFMsg::ReqAckLeaveGuild xData;
	if (!NFINetModule::RecivePB(msg, xData, nPlayerID))
    {
        return 0;
    }

    m_pKernelModule->SetPropertyObject(nPlayerID, "GuildID", NFIDENTID());

    m_pGameServerNet_ServerModule->SendMsgPBToGate(msg.GetMsgHead()->GetMsgID(), xData, nPlayerID);
    return 0;
}
int NFCLoginNet_ServerModule::OnViewWorldProcess( const NFIPacket& msg )
{
	NFIDENTID nPlayerID;
	NFMsg::ReqServerList xMsg;
	if (!RecivePB(msg, xMsg, nPlayerID))
	{
		return 0;
	}

	if (xMsg.type() == NFMsg::RSLT_WORLD_SERVER)
	{
		SynWorldToClient(msg.GetFd());
	}

	return 0;
}
int NFCGameServerToWorldModule::OnAckJoinGuildProcess( const NFIPacket& msg )
{
    NFIDENTID nPlayerID;
    NFMsg::ReqAckJoinGuild xData;
	if (!NFINetModule::RecivePB(msg, xData, nPlayerID))
    {
        return 0;
    }

	NFIDENTID xGuild = NFINetModule::PBToNF(xData.guild_id());
    if (!xGuild.IsNull())
    {
        m_pKernelModule->SetPropertyObject(nPlayerID, "GuildID", xGuild);
    }

    m_pGameServerNet_ServerModule->SendMsgPBToGate(msg.GetMsgHead()->GetMsgID(), xData, nPlayerID);
    return 0;
}
int NFCGameServerToWorldModule::OnAckCreateGuildProcess( const NFIPacket& msg )
{
    NFIDENTID nPlayerID;
    NFMsg::ReqAckCreateGuild xData;
	if (!NFINetModule::RecivePB(msg, xData, nPlayerID))
    {
        return 0;
    }

	NFIDENTID xGuild = NFINetModule::PBToNF(xData.guild_id());
    m_pKernelModule->SetPropertyObject(nPlayerID, "GuildID", xGuild);

    m_pGameServerNet_ServerModule->SendMsgPBToGate(msg.GetMsgHead()->GetMsgID(), xData, nPlayerID);

    //
    NFMsg::ReqAckJoinGuild xJoinMsg;
    *xJoinMsg.mutable_guild_id() = NFINetModule::NFToPB(xGuild);
    xJoinMsg.set_guild_name(xData.guild_name());

    SendSuitByPB(xGuild.nData64, NFMsg::EGameMsgID::EGMI_REQ_JOIN_GUILD, xJoinMsg, 0, nPlayerID);

    return 0;
}
int NFCLoginNet_ServerModule::OnLoginProcess( const NFIPacket& msg )
{
	NFIDENTID nPlayerID;
	NFMsg::ReqAccountLogin xMsg;
	if (!RecivePB(msg, xMsg, nPlayerID))
	{
		return 0;
	}
    
    NetObject* pNetObject = GetNet()->GetNetObject(msg.GetFd());
    if (pNetObject)
    {
        //还没有登录过
        if (pNetObject->GetConnectKeyState() == 0)
        {
            NFCDataList val;
            val << pNetObject->GetClientID()<< xMsg.account() << xMsg.password();
            m_pEventProcessModule->DoEvent(NFIDENTID(), NFED_ON_CLIENT_LOGIN, val);
        }
    }
	
	return 0;
}
int NFCGameServerToWorldModule::OnReciveWSPack( const NFIPacket& msg )
{
    switch (msg.GetMsgHead()->GetMsgID())
    {
    case NFMsg::EGameMsgID::EGMI_ACK_CREATE_GUILD:
        OnAckCreateGuildProcess(msg);
        break;
    case NFMsg::EGameMsgID::EGMI_ACK_JOIN_GUILD:
        OnAckJoinGuildProcess(msg);        
        break;
    case NFMsg::EGameMsgID::EGMI_ACK_LEAVE_GUILD:
        OnAckLeaveGuildProcess(msg);
        break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_PROPERTY_INT:
//         TransPBToProxy< NFMsg::ObjectPropertyInt>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_PROPERTY_FLOAT:
//         TransPBToProxy<NFMsg::ObjectPropertyFloat>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_PROPERTY_DOUBLE:
//         TransPBToProxy<NFMsg::ObjectPropertyFloat>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_PROPERTY_STRING:
//         TransPBToProxy<NFMsg::ObjectPropertyString>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_PROPERTY_OBJECT:
//         TransPBToProxy<NFMsg::ObjectPropertyObject>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_RECORD_INT:
//         TransPBToProxy<NFMsg::ObjectRecordInt>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_RECORD_FLOAT:
//         TransPBToProxy<NFMsg::ObjectRecordFloat>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_RECORD_DOUBLE:
//         TransPBToProxy<NFMsg::ObjectRecordFloat>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_RECORD_STRING:
//         TransPBToProxy<NFMsg::ObjectRecordString>(msg);
//         break;
// 
//     case NFMsg::EGameMsgID::EGMI_ACK_RECORD_OBJECT:
//         TransPBToProxy<NFMsg::ObjectRecordObject>(msg);
//         break;
//     case NFMsg::EGameMsgID::EGMI_EVENT_RESULT:
//         TransPBToProxy<NFMsg::AckEventResult>(msg);
//         break;

    default:
        TransPBToProxy(msg);
        break;
    }
    return 0;
}
예제 #14
0
bool NFCNet::SendMsg( const NFIPacket& msg, const int nSockIndex)
{
    return SendMsg(msg.GetPacketData(), msg.GetPacketLen(), nSockIndex);
}