| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2588 人关注过本帖
标题:如何实现类似QQ的好友功能?
只看楼主 加入收藏
hponlyone
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-1-3
收藏
 问题点数:0 回复次数:11 
如何实现类似QQ的好友功能?

正在做一个聊天程序程序,已实现文本聊天功能,还想做一个好友功能,但没什么思路,哪位达人指点一下...
如果有高人做过了,可以给我发下...
e-mail:hpyeah816@163.com

搜索更多相关主题的帖子: 好友 
2007-01-03 22:45
jacklee
Rank: 7Rank: 7Rank: 7
来 自:XAplus
等 级:贵宾
威 望:32
帖 子:1769
专家分:104
注 册:2006-11-3
收藏
得分:0 
好友功能就是分组,效果可以实现色彩和动态,应该不难的

XAplus!
讨论群:51090447
删吧删吧,把我的号给删了!
2007-01-04 08:11
wenyingxuan
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-7-16
收藏
得分:0 
同问,请大家指点
2007-07-16 18:59
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
收藏
得分:0 
我也好想知道啊

msdn == 葵花宝典!!!
QQ:122768959
2007-07-19 11:36
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 

#region 1) 显示好友信息类

internal class FriendInfo : IFriendInfo
{
private string m_userID = null;
private bool m_isConnected = false;

// 用户 ID
public string UserID
{
get
{
return m_userID;
}

set
{
m_userID = value;
}
}
// 是否连接成功?
public bool Connected
{
get
{
return m_isConnected;
}

set
{
m_isConnected = value;
}
}
}

#endregion


2007-07-19 11:40
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 


#region 2) 终端设置 定义

// 用户 ID
private string m_userID = null;
// 用户 密码
private string m_userPassword = null;
// 好友 列表 UI
private IPostauthenticateUI m_friendListUI = null;

#endregion


2007-07-19 11:40
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 

#region 3) 内部设置 定义

// Socket
private TextStreamClient m_client = null;

// 接收 线程
private Thread m_receiveThread = null;

// 好友服务列表是否开始?
private bool m_isFriendListRunning = false;
// 好友列表
private Hashtable m_friendList = null;

#endregion


2007-07-19 11:41
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 

#region 4) 唤醒/休眠

public MessengerClient()
{
// 好友列表同步化.
m_friendList = Hashtable.Synchronized(new Hashtable());
}

~MessengerClient() {Close();}

#endregion

#region IPreauthenticateClient的 实现


#region 5) 通过Socket建立连接/中止
public bool Connect(IPEndPoint serverEP)
{
Socket socket = null;
try {
// 创建Socket 并连接
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);

// 指定在调用 Close 之后如果仍有数据要发送,Socket 是否保持连接以及保持多长时间(如果保持连接)。.
LingerOption linger = new LingerOption(true, 5);
socket.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Linger, linger);

// 与服务端建立连接.
socket.Connect(serverEP);

// 通过Socket建立客户端.
m_client = new TextStreamClient(socket);

return true;
} catch (SocketException se) {
if (se.ErrorCode == SocketErrors.ConnectionRefused) {
return false;
} else {
Debug.Write(se.ToString());
return false;
}
}
}
# endregion

#region 6) 关闭Socket.
public void Close()
{
// 关闭接收线程.
if (m_receiveThread != null) {
m_receiveThread.Abort();
m_receiveThread.Join();
m_receiveThread = null;
}

// 关闭客户端.
if (m_client != null) {
Logout();
m_client.Dispose();
m_client = null;
}
}

#endregion

#endregion


2007-07-19 11:41
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 

public class MessengerXmlDB : IMessengerDB
{
#region 自定义常量

//
private const string DBSchemaFileName = "MessengerDataSet.xsd";
// 数据文件
private const string DBDataFileName = "DefaultMessengerData.xml";

// 用户表
protected const string TableUser = "UserList";
// 好友表
protected const string TableFriend = "FriendList";
// 好友关系
protected const string RelationFriend = "FriendRelation";

// 用户表中的 用户 ID 列
protected const string UserColUserID = "UserID";
// 用户表中的 用户 密码 列
protected const string UserColPassword = "Password";

// 好友表中 用户ID 列
protected const string FriendColUserID = "UserID";
// 好友表中 用户的好友ID 列
protected const string FriendColFriendID = "FriendID";


2007-07-19 11:42
疯狂老太婆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-17
收藏
得分:0 

#region 好友操作

// 获取好友.
public string [] GetFriends(string userID)
{
// 用户是否存在?.
DataRow userRow = m_userTable.Rows.Find(userID);

if (userRow == null) {
// 用户不存在.
return null;
} else {
// 用户存在 根据好友关系 添充好友row.
DataRow [] friendRows =
userRow.GetChildRows(m_ds.Relations[RelationFriend]);

// 没有好友返回Null
if (friendRows.Length < 1) {
return null;
}

// 完成好友列表,并返回.
string [] friendList = new string[friendRows.Length];

// 将用户好友添充.
int i = 0;
foreach (DataRow row in friendRows) {
friendList[i++] = (string)row[FriendColFriendID];
}

// 返回用户好友列表
return friendList;
}
}

// 好友添加.
public bool InsertFriend(string userID, string friendID)
{
// 不能添加自己
if (userID == friendID) return false;

// 获取用户的好友.
DataRow userRow = m_userTable.Rows.Find(userID);

// 欲添加的好友不存在时
if (m_userTable.Rows.Find(friendID) == null) return false;

// 获取好友table.
DataTable friendTable = m_ds.Tables[TableFriend];

// 为下一下rows.Length做工作,看是不是存在这个关系.
DataRow [] rows = friendTable.Select(
FriendColUserID + " = '" + userID + "' and " +
FriendColFriendID + " = '" + friendID + "'");

// 若好友存在在用户的好友中时
if (rows.Length > 0) return false;

// OK 可以.
DataRow friendRow = friendTable.NewRow();
friendRow[FriendColUserID] = userID;
friendRow[FriendColFriendID] = friendID;

// 添加 并更新
friendTable.Rows.Add(friendRow);
friendTable.AcceptChanges();

return true;
}

// 好友的删除.
public bool DeleteFriend(string userID, string friendID)
{
// 获取用户好友.
DataTable friendTable = m_ds.Tables[TableFriend];

// 将此好友与用户的关系写入表中.
DataRow [] rows = friendTable.Select(
FriendColUserID + " = '" + userID + "' and " +
FriendColFriendID + " = '" + friendID + "'");

if (rows.Length > 0) {
// 的确存在这个好友关系,那么删除之,并更新..
rows[0].Delete();
m_userTable.AcceptChanges();
}

return true;
}

#endregion


2007-07-19 11:43
快速回复:如何实现类似QQ的好友功能?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017886 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved