bool CLoginModule::OnPlayerLogout(PersonID id) { CPlayer* player = PlayerMgr.GetObj(id); if (!player) return false; //下线前同步属性存盘 char timestr[32] = { 0 }; DatatimeToString(timestr); player->SetFieldStr(Role_Attrib_LogoutTime, timestr, false, true); //登出事件 CEvent* evnt = MakeEvent(Event_Player_Logout, player->GetID(), NULL, true); player->OnEvent(evnt); //同步DataServer退出 DataModule.syncRemove(player, GameServer.getServerSock(CBaseServer::Linker_Server_Data)); LOGGER_NOTICE("[Logout] Online User:"******" Player:"INT64_FMT, player->GetFieldI64(Role_Attrib_UserID), id); UserMgr.Delete(player->GetFieldI64(Role_Attrib_UserID)); PlayerMgr.Delete(id); return true; }
void CUserMgr::RemoveUser(CUser* user, bool sync) { if( !user ) return; m_UserLock.LOCK(); m_UserList.Remove( user->m_id ); m_UserLock.UNLOCK(); if( user->m_LogonPlayer > 0 ) { //if( sync ) { Message::PlayerLogout msg; msg.set_pid( user->m_LogonPlayer ); Packet pack; PROTOBUF_CMD_PACKAGE(pack, msg, Message::MSG_PLAYER_LOGOUT_REQEUST); GETSERVERNET(&GateServer)->sendMsg(user->m_GameSock, &pack); } } LOGGER_NOTICE("[Logout] Remove User:"INT64_FMT, user->m_id); Delete( user->m_ClientSock ); }
bool CLoginModule::OnPlayerLogin(CPlayer* player) { if( !player ) return false; _OnPlayerSync(player); //执行脚本 LuaParam param[1]; param[0].SetDataNum(player->GetID()); LuaEngine.RunLuaFunction("OnLogin", "Player", NULL, param, 1); char timestr[32] = { 0 }; DatatimeToString(timestr); player->SetFieldStr(Role_Attrib_LoginTime, timestr, false, true); player->SetOnline(Online_Flag_On); player->m_ItemUnit.GainItem(10001001, Item_Reason_UnKonw); CEvent* evnt = MakeEvent(Event_Player_Login, player->GetID(), NULL, true); player->OnEvent(evnt); LOGGER_NOTICE("[Login] Online User:"******" Player:"INT64_FMT" Name:%s", player->GetFieldI64(Role_Attrib_UserID), player->GetID(), player->GetName().c_str()); return true; }
bool SFB::Audio::CoreAudioDecoder::_Close(CFErrorRef */*error*/) { // Close the output file if(mExtAudioFile) { OSStatus result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); mExtAudioFile = nullptr; } if(mAudioFile) { OSStatus result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; } return true; }
void CUserMgr::_UserHeartLogic() { //VPROF("_UserHeartLogic"); TMV t = time(NULL); SOCKET sock = m_list.Head(); while(CUser* user = GetObj(sock)) { sock = m_list.Next(sock); if( m_HeartTimeout > 0 && t - user->m_HeartTime > m_HeartTimeout ) { LOGGER_NOTICE("[Heart] Heart Timeout, User:"INT64_FMT, user->m_id); Exit( user ); } } }
bool CUserMgr::_HandlePacket_PlayerLogin(Packet* pack) { if( !pack ) return false; Message::PlayerLogin msg; PROTOBUF_CMD_PARSER( pack, msg ); CUser* user = GetUserByUID( msg.uid() ); if( !user ) return false; user->m_LogonPlayer = msg.pid(); LOGGER_NOTICE("[Login] Login Sucess, User:"******" Player:"INT64_FMT" Socket:%d", user->m_id, user->m_LogonPlayer, user->m_ClientSock); return true; }
bool SFB::Audio::MODMetadata::_WriteMetadata(CFErrorRef */*error*/) { LOGGER_NOTICE("org.sbooth.AudioEngine.AudioMetadata.MOD", "Writing of MOD metadata is not supported"); return false; }
bool CLoginModule::_HandlePacket_UserLogin(Packet* pack) { if( !pack ) return false; Message::UserLogin msg; PROTOBUF_CMD_PARSER( pack, msg ); CUser* pUser = UserMgr.GetObj( msg.uid() ); if( pUser ) { if( pUser->m_GateSocket != pack->GetNetID() ) { //发送踢号 Message::UserDisplace msgKick; msgKick.set_uid( msg.uid() ); Packet packKick; PROTOBUF_CMD_PACKAGE(packKick, msgKick, Message::MSG_USER_DISPLACE); pUser->SendGateMsg( &packKick ); LOGGER_NOTICE("[Login] Displace Online User:"******"[Login] Player Error(User:"******", Player:"INT64_FMT")", pUser->m_ID, pid); return false; } OnPlayerLogin(player); } else { LOGGER_DEBUG("[Login] Online User not have player: (User:"******", Player:"INT64_FMT")", pUser->m_ID, pUser->GetLoginPlayer()); //向GateServer同步该账号无角色 Message::PlayerCount msgCount; msgCount.set_uid( msg.uid() ); //msgCount.set_count( 0 ); Packet packCount; PROTOBUF_CMD_PACKAGE(packCount, msgCount, Message::MSG_PLAYER_LOAD_COUNT); pUser->SendGateMsg( &packCount ); } } else { pUser = UserMgr.Create( msg.uid() ); if( !pUser ) return false; pUser->m_ID = msg.uid(); pUser->m_GateSocket = pack->GetNetID(); Message::UserLogin message; message.set_uid(msg.uid()); message.set_world(msg.world()); message.set_server(msg.server()); message.set_type("player"); message.set_key("userid"); //向data发送请求,加载角色数据 Packet packet; PROTOBUF_CMD_PACKAGE(packet, message, Message::MSG_USER_lOGIN_REQUEST); GETSERVERNET(&GameServer)->sendMsg(GameServer.getServerSock(CBaseServer::Linker_Server_Data), &packet); } LOGGER_NOTICE( "[Login] User:"INT64_FMT, msg.uid() ); return true; }
bool SFB::Audio::CoreAudioDecoder::_Open(CFErrorRef *error) { // Open the input file OSStatus result = AudioFileOpenWithCallbacks(this, myAudioFile_ReadProc, nullptr, myAudioFile_GetSizeProc, nullptr, 0, &mAudioFile); if(noErr != result) { LOGGER_CRIT("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileOpenWithCallbacks failed: " << result); if(error) { SFB::CFString description = CFCopyLocalizedString(CFSTR("The format of the file “%@” was not recognized."), ""); SFB::CFString failureReason = CFCopyLocalizedString(CFSTR("File Format Not Recognized"), ""); SFB::CFString recoverySuggestion = CFCopyLocalizedString(CFSTR("The file's extension may not match the file's type."), ""); *error = CreateErrorForURL(Decoder::ErrorDomain, Decoder::InputOutputError, description, mInputSource->GetURL(), failureReason, recoverySuggestion); } return false; } result = ExtAudioFileWrapAudioFileID(mAudioFile, false, &mExtAudioFile); if(noErr != result) { LOGGER_CRIT("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileWrapAudioFileID failed: " << result); if(error) { SFB::CFString description = CFCopyLocalizedString(CFSTR("The format of the file “%@” was not recognized."), ""); SFB::CFString failureReason = CFCopyLocalizedString(CFSTR("File Format Not Recognized"), ""); SFB::CFString recoverySuggestion = CFCopyLocalizedString(CFSTR("The file's extension may not match the file's type."), ""); *error = CreateErrorForURL(Decoder::ErrorDomain, Decoder::InputOutputError, description, mInputSource->GetURL(), failureReason, recoverySuggestion); } result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; return false; } // Query file format UInt32 dataSize = sizeof(mSourceFormat); result = ExtAudioFileGetProperty(mExtAudioFile, kExtAudioFileProperty_FileDataFormat, &dataSize, &mSourceFormat); if(noErr != result) { LOGGER_CRIT("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileGetProperty (kExtAudioFileProperty_FileDataFormat) failed: " << result); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } // Tell the ExtAudioFile the format in which we'd like our data // For Linear PCM formats, leave the data untouched if(kAudioFormatLinearPCM == mSourceFormat.mFormatID) mFormat = mSourceFormat; // For Apple Lossless, convert to high-aligned signed ints in 32 bits else if(kAudioFormatAppleLossless == mSourceFormat.mFormatID) { mFormat.mFormatID = kAudioFormatLinearPCM; mFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsAlignedHigh; mFormat.mSampleRate = mSourceFormat.mSampleRate; mFormat.mChannelsPerFrame = mSourceFormat.mChannelsPerFrame; if(kAppleLosslessFormatFlag_16BitSourceData == mSourceFormat.mFormatFlags) mFormat.mBitsPerChannel = 16; else if(kAppleLosslessFormatFlag_20BitSourceData == mSourceFormat.mFormatFlags) mFormat.mBitsPerChannel = 20; else if(kAppleLosslessFormatFlag_24BitSourceData == mSourceFormat.mFormatFlags) mFormat.mBitsPerChannel = 24; else if(kAppleLosslessFormatFlag_32BitSourceData == mSourceFormat.mFormatFlags) mFormat.mBitsPerChannel = 32; mFormat.mBytesPerPacket = 4 * mFormat.mChannelsPerFrame; mFormat.mFramesPerPacket = 1; mFormat.mBytesPerFrame = mFormat.mBytesPerPacket * mFormat.mFramesPerPacket; mFormat.mReserved = 0; } // For all other formats convert to the canonical Core Audio format else { mFormat.mFormatID = kAudioFormatLinearPCM; mFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved; mFormat.mSampleRate = mSourceFormat.mSampleRate; mFormat.mChannelsPerFrame = mSourceFormat.mChannelsPerFrame; mFormat.mBitsPerChannel = 32; mFormat.mBytesPerPacket = (mFormat.mBitsPerChannel / 8); mFormat.mFramesPerPacket = 1; mFormat.mBytesPerFrame = mFormat.mBytesPerPacket * mFormat.mFramesPerPacket; mFormat.mReserved = 0; } result = ExtAudioFileSetProperty(mExtAudioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(mFormat), &mFormat); if(noErr != result) { LOGGER_CRIT("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileSetProperty (kExtAudioFileProperty_ClientDataFormat) failed: " << result); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } // Setup the channel layout // There is a bug in EAF where if the underlying AF doesn't return a channel layout it returns an empty struct // result = ExtAudioFileGetPropertyInfo(mExtAudioFile, kExtAudioFileProperty_FileChannelLayout, &dataSize, nullptr); result = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyChannelLayout, &dataSize, nullptr); if(noErr == result) { auto channelLayout = (AudioChannelLayout *)malloc(dataSize); // result = ExtAudioFileGetProperty(mExtAudioFile, kExtAudioFileProperty_FileChannelLayout, &dataSize, mChannelLayout); result = AudioFileGetProperty(mAudioFile, kAudioFilePropertyChannelLayout, &dataSize, channelLayout); if(noErr != result) { // LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileGetProperty (kExtAudioFileProperty_FileChannelLayout) failed: " << result); LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileGetProperty (kAudioFilePropertyChannelLayout) failed: " << result); free(channelLayout); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } mChannelLayout = channelLayout; free(channelLayout); } else // LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileGetPropertyInfo (kExtAudioFileProperty_FileChannelLayout) failed: " << result); LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileGetPropertyInfo (kAudioFilePropertyChannelLayout) failed: " << result); // Work around bugs in ExtAudioFile: http://lists.apple.com/archives/coreaudio-api/2009/Nov/msg00119.html // Synopsis: ExtAudioFileTell() and ExtAudioFileSeek() are broken for m4a files AudioFileID audioFile; dataSize = sizeof(audioFile); result = ExtAudioFileGetProperty(mExtAudioFile, kExtAudioFileProperty_AudioFile, &dataSize, &audioFile); if(noErr != result) { LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileGetProperty (kExtAudioFileProperty_AudioFile) failed: " << result); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } AudioFileTypeID fileFormat; dataSize = sizeof(fileFormat); result = AudioFileGetProperty(audioFile, kAudioFilePropertyFileFormat, &dataSize, &fileFormat); if(noErr != result) { LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileGetProperty (kAudioFilePropertyFileFormat) failed: " << result); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } if(kAudioFileM4AType == fileFormat || kAudioFileMPEG4Type == fileFormat || kAudioFileAAC_ADTSType == fileFormat) mUseM4AWorkarounds = true; #if 0 // This was supposed to determine if ExtAudioFile had been fixed, but even though // it passes on 10.6.2 things are not behaving properly SInt64 currentFrame = -1; result = ExtAudioFileTell(mExtAudioFile, ¤tFrame); if(noErr != result) { LOGGER_ERR("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileTell failed: " << result); result = ExtAudioFileDispose(mExtAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "ExtAudioFileDispose failed: " << result); result = AudioFileClose(mAudioFile); if(noErr != result) LOGGER_NOTICE("org.sbooth.AudioEngine.Decoder.CoreAudio", "AudioFileClose failed: " << result); mAudioFile = nullptr; mExtAudioFile = nullptr; return false; } if(0 > currentFrame) mUseM4AWorkarounds = true; #endif return true; }