即時通訊 好友列表業務邏輯詳解

在IM通訊中,通常需要管理自己的小夥伴,經常聯繫的,重要的用戶需要標識在同一用戶列表裏,方便自己快速聯繫以及查看好友動態。那麼如何可以做到類似QQ的好友列表功能呢,如

大廳好友解決方案包括:
1
、業務服務器可以設置用戶的好友列表,客戶端可以獲得好友列表,不需要進入房間;
2、客戶端可以獲得好友上線、下線的狀態通知;
3、業務服務器可以自定義設置用戶的任意屬性(如名稱、簽名、性別、備註等)並能同步到客戶端,客戶端可以獲取業務服務器自定義的用戶屬性;

下面以一款在市面(佰銳上科技)功能強大的SDK爲例做功能實現說明,

客戶端API接口:

1.    #define WM_GV_USERINFOUPDATE   WM_GV + 16               ///< 用戶信息更新通知,wParamINT)表示用戶ID號,lParamINT)表示更新類別

2.    #define WM_GV_FRIENDSTATUS     WM_GV + 17               ///< 好友在線狀態變化,wParamINT)表示好友用戶ID號,lParamINT)表示用戶的當前活動狀態: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.    // 用戶信息控制類型定義(APIBRAS_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爲分組IdlpStrValue爲分組名稱

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爲分組IdlParam爲好友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);

複製代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章