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