void ObjectController::_handleRemoveFriend(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
	PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);

	if(player->getContactListUpdatePending())
		return;
	else
		player->setContactListUpdatePending(true);

	string	friendName;
	int8	sql[1024],end[16],*sqlPointer;

	message->getStringUnicode16(friendName);
	friendName.convert(BSTRType_ANSI);

	if(!friendName.getLength())
	{
		player->setContactListUpdatePending(false);
		return;
	}


	if(player->isConnected())
		gMessageLib->sendHeartBeat(player->getClient());

	friendName.toLower();

	if(!player->checkFriendList(friendName.getCrc()))
	{
		player->setContactListUpdatePending(false);	
		return;
	}
	ObjControllerAsyncContainer* asyncContainer = new(mDBAsyncContainerPool.malloc()) ObjControllerAsyncContainer(OCQuery_RemoveFriend);
	asyncContainer->mString = friendName.getAnsi();

	sprintf(sql,"SELECT sf_removeFriend(%"PRIu64",'",player->getId());
	sprintf(end,"')");
	sqlPointer = sql + strlen(sql);
	sqlPointer += mDatabase->Escape_String(sqlPointer,friendName.getAnsi(),friendName.getLength());
	strcat(sql,end);

	mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);

		
}
void ObjectController::_handleAddIgnoreDBReply(uint32 retCode,string ignoreName)
{
	
	PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);

	// gLogger->logMsgF("_handleAddIgnoreDBReply retCode = %u",MSG_NORMAL, retCode);

	switch(retCode)
	{
		// no such name
		case 0:
		default:
		{
			ignoreName.convert(BSTRType_Unicode16);
			gMessageLib->sendSystemMessage(player,L"","cmnty","ignore_not_found","","",L"",0,"","",ignoreName.getUnicode16());
		}
		break;

		// add ok
		case 1:
		{
			// update list
			player->addIgnore(ignoreName.getAnsi());
			gMessageLib->sendIgnoreListPlay9(player);

			// send notification
			ignoreName.convert(BSTRType_Unicode16);
			gMessageLib->sendSystemMessage(player,L"","cmnty","ignore_added","","",L"",0,"","",ignoreName.getUnicode16());

			// notify chat server
			if(player->isConnected())
			{
				gMessageFactory->StartMessage();
				gMessageFactory->addUint32(opNotifyChatAddIgnore);
				gMessageFactory->addString(ignoreName);
				Message* message = gMessageFactory->EndMessage();

				player->getClient()->SendChannelA(message,player->getAccountId(),CR_Chat,2);
			}
		}
		break;
	}

	player->setContactListUpdatePending(false);
}
void ObjectController::_handleRemoveFriendDBReply(uint32 retCode,string friendName)
{
	PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);

	switch(retCode)
	{
		// no such name
		case 0:
		default:
		{
			friendName.convert(BSTRType_Unicode16);
			gMessageLib->sendSystemMessage(player,L"","cmnty","friend_not_found","","",L"",0,"","",friendName.getUnicode16());
		}
		break;

		// remove ok
		case 1:
		{
			// update list
			player->removeFriend(friendName.getCrc());
			gMessageLib->sendFriendListPlay9(player);

			// send notification
			friendName.convert(BSTRType_Unicode16);
			gMessageLib->sendSystemMessage(player,L"","cmnty","friend_removed","","",L"",0,"","",friendName.getUnicode16());

			if(player->isConnected())
			{
				// notify chat server
				gMessageFactory->StartMessage();
				gMessageFactory->addUint32(opNotifyChatRemoveFriend);
				gMessageFactory->addString(friendName);
				Message* message = gMessageFactory->EndMessage();

				player->getClient()->SendChannelA(message,player->getAccountId(),CR_Chat,2);
			}
		}
		break;
	}

	player->setContactListUpdatePending(false);
}
void ObjectController::_handleAddFriend(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
	PlayerObject*	player		= dynamic_cast<PlayerObject*>(mObject);

	if(player->getContactListUpdatePending())
		return;
	else
		player->setContactListUpdatePending(true);

	string	friendName;
	int8	sql[1024],end[16],*sqlPointer;

	message->getStringUnicode16(friendName);
	friendName.convert(BSTRType_ANSI);

	if(!friendName.getLength())
	{
		player->setContactListUpdatePending(false);
		return;
	}

	if(player->isConnected())
		gMessageLib->sendHeartBeat(player->getClient());

	friendName.toLower();

	// check if he's already our friend
	if(player->checkFriendList(friendName.getCrc()))
	{
		friendName.convert(BSTRType_Unicode16);
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_duplicate","","",L"",0,"","",friendName.getUnicode16());
		player->setContactListUpdatePending(false);
		return;
	}

	// or ignored
	
	if(player->checkIgnoreList(friendName.getCrc()))
	{
		friendName.convert(BSTRType_Unicode16);
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_fail_is_ignored","","",L"",0,"","",friendName.getUnicode16());
		player->setContactListUpdatePending(false);
		return;
	}

	// check our own name
	string firstName = player->getFirstName().getAnsi();
	firstName.toLower();

	if(strcmp(firstName.getAnsi(),friendName.getAnsi()) == 0)
	{
		player->setContactListUpdatePending(false);
		return;
	}

	// pull the db query
	ObjControllerAsyncContainer* asyncContainer = new(mDBAsyncContainerPool.malloc()) ObjControllerAsyncContainer(OCQuery_AddFriend);
	asyncContainer->mString = friendName.getAnsi();

	sprintf(sql,"SELECT sf_addFriend(%"PRIu64",'",player->getId());
	sprintf(end,"')");
	sqlPointer = sql + strlen(sql);
	sqlPointer += mDatabase->Escape_String(sqlPointer,friendName.getAnsi(),friendName.getLength());
	strcat(sql,end);

	mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);

}