在IM通訊中,通常需要管理自己的小夥伴,經常聯繫的,重要的用戶需要標識在同一用戶列表裏,方便自己快速聯繫以及查看好友動態。那麼如何可以做到類似QQ的好友列表功能呢,如
大廳好友解決方案包括:
1、業務服務器可以設置用戶的好友列表,客戶端可以獲得好友列表,不需要進入房間;
2、客戶端可以獲得好友上線、下線的狀態通知;
3、業務服務器可以自定義設置用戶的任意屬性(如名稱、簽名、性別、備註等)並能同步到客戶端,客戶端可以獲取業務服務器自定義的用戶屬性;
下面以一款在市面(佰銳上科技)功能強大的SDK爲例做功能實現說明,
客戶端API接口:
1. #define WM_GV_USERINFOUPDATE WM_GV + 16 ///< 用戶信息更新通知,wParam(INT)表示用戶ID號,lParam(INT)表示更新類別
2. #define WM_GV_FRIENDSTATUS WM_GV + 17 ///< 好友在線狀態變化,wParam(INT)表示好友用戶ID號,lParam(INT)表示用戶的當前活動狀態:0 離線, 1 上線
3.
4. // 獲取用戶好友ID列表
5. BRAC_API DWORD BRAC_GetUserFriends(LPDWORD lpUserIDArray, DWORD&dwUserNum);
6. // 獲取好友在線狀態
7. BRAC_API DWORD BRAC_GetFriendStatus(DWORD dwFriendUserId, DWORD&dwStatus);
8. // 獲取用戶分組ID列表
9. BRAC_API DWORD BRAC_GetUserGroups(LPDWORD lpGroupIDArray, DWORD&dwGroupNum);
10. // 獲取分組下面的好友列表
11. BRAC_API DWORDBRAC_GetGroupFriends(DWORD dwGroupId, LPDWORD lpUserIDArray, DWORD&dwUserNum);
12. // 獲取用戶信息
13. BRAC_API DWORDBRAC_GetUserInfo(DWORD dwUserId, DWORD dwInfoId, TCHAR* lpInfoName, DWORDdwLen);
14. // 獲取用戶分組名稱
15. BRAC_API DWORD BRAC_GetGroupName(DWORDdwGroupId, TCHAR* lpGroupName, DWORD dwLen);
服務器端的API接口:
1. // 用戶信息控制類型定義(API:BRAS_UserInfoControl 傳入參數、OnUserInfoControl回調參數)
2. #define BRAS_USERINFO_CTRLCODE_KICKOUT 1 ///< 將指定用戶從系統中踢掉
3. #define BRAS_USERINFO_CTRLCODE_SYNCDATA 2 ///< 將指定用戶的數據同步給客戶端
4.
5. #define BRAS_USERINFO_CTRLCODE_ADDGROUP 20 ///< 添加用戶分組,wParam爲分組Id,lpStrValue爲分組名稱
6. #define BRAS_USERINFO_CTRLCODE_DELGROUP 21 ///< 刪除用戶分組,wParam爲分組Id
7. #define BRAS_USERINFO_CTRLCODE_ADDFRIEND 22 ///< 添加用戶好友,wParam爲好友Id
8. #define BRAS_USERINFO_CTRLCODE_DELFRIEND 23 ///< 刪除用戶好友,wParam爲好友Id
9. #define BRAS_USERINFO_CTRLCODE_SETGROUPRELATION 24 ///< 設置好友與分組的關聯關係,wParam爲分組Id,lParam爲好友Id,表示好友屬於某個分組
10.
11.
12. // 設置用戶的詳細信息
13. BRAS_API DWORDBRAS_SetUserInfo(DWORD dwUserId, DWORD dwInfoId, LPCTSTR lpInfoValue, DWORDdwFlags=0);
14. // 獲取用戶的詳細信息
15. BRAS_API DWORDBRAS_GetUserInfo(DWORD dwUserId, DWORD dwInfoId, TCHAR* lpInfoValue, DWORDdwSize);
16. // 用戶信息控制
17. BRAS_API DWORD BRAS_UserInfoControl(DWORDdwUserId, DWORD dwCtrlCode, DWORD wParam=0, DWORD lParam=0, LPCTSTRlpStrValue=NULL);
服務器端業務邏輯處理流程
在用戶登錄成功事件中設置用戶的好友列表、分組列表、用戶屬性,併發送數據同步指令: 1. // 用戶登錄成功回調函數定義 2. typedef void (CALLBACK* BRAS_OnUserLoginAction_CallBack)(DWORD dwUserId, LPCTSTR szUserName, DWORD dwLevel, LPCTSTR szIpAddr, LPVOID lpUserValue); 複製代碼 一、添加用戶分組 1. DWORD dwGroupId = 1; 2. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_ADDGROUP, dwGroupId, 0, "我的好友"); 3. dwGroupId = 2; 4. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_ADDGROUP, dwGroupId, 0, "公司同事"); 複製代碼 二、添加用戶好友 1. DWORD dwFriendUserId = 10010; 2. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_ADDFRIEND, dwFriendUserId); 3. dwFriendUserId = 10011; 4. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_ADDFRIEND, dwFriendUserId ); 複製代碼 三、設置好友與分組的關係(即好友屬於哪一個分組) 1. DWORD dwGroupId = 1; 2. DWORD dwFriendUserId = 10010; 3. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_SETGROUPRELATION, dwGroupId, dwFriendUserId); 4. dwGroupId = 2; 5. dwFriendUserId = 10011; 6. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_SETGROUPRELATION, dwGroupId, dwFriendUserId); 複製代碼 四、設置用戶信息(用戶資料) 1. BRAS_SetUserInfo(dwUserId, 1, "我的簽名"); 2. BRAS_SetUserInfo(dwUserId, 2, "020-85276986"); 3. …… 複製代碼 五、將前面設置的資料同步給客戶端 1. BRAS_UserInfoControl(dwUserId, BRAS_USERINFO_CTRLCODE_SYNCDATA, 0, 0); 複製代碼 |