diff --git a/Interact/AttrNames.cs b/Interact/AttrNames.cs
index a780338..1d9fa81 100644
--- a/Interact/AttrNames.cs
+++ b/Interact/AttrNames.cs
@@ -8,10 +8,14 @@ namespace Interact
//Json数据的字段访问字符串
public static class AttrNames
{
+ //基本信息
public const string Token = "Token";
public const string Operation = "Operation";
- public const string Error = "Error";
+ //处理结果信息
+ public const string Error = "Error";
+
+ //用户信息
public const string User = "User";
public const string NickName = "NickName";
public const string Motto = "Motto";
diff --git a/Interact/Client.cs b/Interact/Client.cs
index 3ed99bc..c2de87a 100644
--- a/Interact/Client.cs
+++ b/Interact/Client.cs
@@ -7,6 +7,7 @@ using System.Net;
using System.Threading;
using System.Collections.Concurrent;
using System.Drawing;
+using System.IO;
namespace Interact
{
@@ -46,7 +47,7 @@ namespace Interact
//获取用户列表结果处理事件
public static event GetUserListDoneHandler OnGetUserListDone;
//获取用户头像结果处理事件
- public static event GetUserPhotoDoneHandler OnGetUserPhotoDoneHandler;
+ public static event GetUserPhotoDoneHandler OnGetUserPhotoDone;
//发送消息时是否要求服务器返回处理结果
public static bool DoesSendMessageReturn
{
@@ -78,7 +79,8 @@ namespace Interact
}
///
- /// 初始化客户端,连接服务器。如果成功则启动数据接收和发送线程
+ /// 初始化客户端,连接服务器。如果成功则启动数据接收和发送线程。
+ /// 注意,当网络不稳定时此方法可能会阻塞。
///
/// 如果已连接到服务器返回true,否则返回false。
public static bool Initialize()
@@ -135,31 +137,100 @@ namespace Interact
/// 数据发送完毕时回调函数
/// 成功将请求加入发送队列返回true,否则返回false。
public static bool QueueSendMessage(string text, User to, Action callback = null)
- { return false; }
+ {
+ JsonSendMessageHead jsonObj = new JsonSendMessageHead()
+ {
+ Token = "",
+ Operation = Operations.SendMessage.ToString(),
+ To = to.Name,
+ NeedResult = DoesSendMessageReturn ? "1" : "0"
+ };
+ Packet packet = new Packet
+ {
+ Head = jsonObj,
+ Data = Encoding.UTF8.GetBytes(text),
+ CallBack = callback
+ };
+ return Send(packet);
+ }
+
///
/// 请求登出。异步,此方法将请求放入请求队列后返回。
///
/// 数据发送完毕时回调函数
/// 成功将请求加入发送队列返回true,否则返回false。
-
public static bool QueueLogout(Action callback = null)
- { return false; }
+ {
+ BaseHead jsonObj = new BaseHead()
+ {
+ Token = "",
+ Operation = Operations.Logout.ToString(),
+ };
+ Packet packet = new Packet
+ {
+ Head = jsonObj,
+ Data = null,
+ CallBack = callback
+ };
+ return Send(packet);
+ }
+
///
/// 请求用户列表。异步,此方法将请求放入请求队列后返回。
///
/// 数据发送完毕时回调函数
/// 成功将请求加入发送队列返回true,否则返回false。
-
public static bool QueueGetUserList(Action callback = null)
- { return false; }
+ {
+ BaseHead jsonObj = new BaseHead()
+ {
+ Token = "",
+ Operation = Operations.GetUserList.ToString(),
+ };
+ Packet packet = new Packet
+ {
+ Head = jsonObj,
+ Data = null,
+ CallBack = callback
+ };
+ return Send(packet);
+ }
+
///
/// 请求更新当前登录用户信息。异步,此方法将请求放入请求队列后返回。
///
/// 数据发送完毕时回调函数
/// 成功将请求加入发送队列返回true,否则返回false。
-
- public static bool QueueUpdateUserInfo(Action callback = null)
- { return false; }
+ public static bool QueueUpdateUserInfo(UserInfo userInfo, Action callback = null)
+ {
+ byte[] photoData = null; //头像数据
+ //将头像数据转换到字符数组
+ if (userInfo.Photo != null)
+ {
+ MemoryStream memStream = new MemoryStream();
+ userInfo.Photo.Save(memStream, userInfo.Photo.RawFormat);
+ photoData = new byte[memStream.Length];
+ memStream.Seek(0, SeekOrigin.Begin);
+ memStream.Read(photoData, 0, photoData.Length);
+ }
+ //构建数据包
+ JsonUserInfoHead jsonObj = new JsonUserInfoHead()
+ {
+ Token = "",
+ Operation = Operations.UpdateUserInfo.ToString(),
+ NickName = userInfo.NickName,
+ Password = userInfo.Password,
+ Motto = userInfo.Motto,
+ Photo = userInfo.Photo == null ? 0 : photoData.Length
+ };
+ Packet packet = new Packet
+ {
+ Head = jsonObj,
+ Data = photoData,
+ CallBack = callback
+ };
+ return Send(packet);
+ }
///
/// 请求获取指定用户的头像。异步,此方法将请求放入请求队列后返回。
@@ -168,6 +239,20 @@ namespace Interact
/// 数据发送完毕时回调函数
/// 成功将请求加入发送队列返回true,否则返回false。
public static bool QueueGetUserPhoto(User user, Action callback = null)
- { return false; }
+ {
+ JsonGetUserPhotoHead jsonObj = new JsonGetUserPhotoHead()
+ {
+ Token = "",
+ Operation = Operations.GetUserPhoto.ToString(),
+ User = user.Name
+ };
+ Packet packet = new Packet
+ {
+ Head = jsonObj,
+ Data = null,
+ CallBack = callback
+ };
+ return Send(packet);
+ }
}
}
diff --git a/Interact/Handle.cs b/Interact/Handle.cs
index b2871e3..7b29bcc 100644
--- a/Interact/Handle.cs
+++ b/Interact/Handle.cs
@@ -50,7 +50,10 @@ namespace Interact
{
//发起登录完成事件
if (head.Error != "")
+ {
OnLoginDone?.Invoke(head, null);
+ return;
+ }
JObject dataObj = (JObject)JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data));
User user = new User
{
diff --git a/Interact/JsonObject.cs b/Interact/JsonObject.cs
index fd2ef53..c8602a5 100644
--- a/Interact/JsonObject.cs
+++ b/Interact/JsonObject.cs
@@ -10,6 +10,7 @@ namespace Interact
public class BaseHead
{
//请求ID,由发送方定义的随机字符串。如果接受方有返回数据应包含相同的Token
+ //此特性暂时未启用,传空字符串即可
public string Token;
//操作类型,决定数据的其他内容
public string Operation;
@@ -30,13 +31,26 @@ namespace Interact
public string Pwd;
}
- //用户信息
- internal class JsonUserInfo
+ //发送消息包头
+ internal class JsonSendMessageHead : BaseHead
{
- public string User; //用户名
- public string NickName; //昵称
- public string Motto; //个性签名
- public string UGroup; //用户组
+ public string To; //消息接收者用户名
+ public string NeedResult = "0"; //是否要求服务器返回处理结果。否传“0”
+ }
+
+ //更新用户信息包头
+ internal class JsonUserInfoHead : BaseHead
+ {
+ public string NickName = null;
+ public string Password = null;
+ public string Motto = null;
+ public int Photo = 0; //新头像大小
+ }
+
+ //获取用户头像请求的包头
+ internal class JsonGetUserPhotoHead : BaseHead
+ {
+ public string User; //要获取头像的用户名
}
#endregion
}
diff --git a/Interact/User.cs b/Interact/User.cs
index f8ad5db..053ad61 100644
--- a/Interact/User.cs
+++ b/Interact/User.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Drawing;
namespace Interact
{
@@ -17,6 +18,15 @@ namespace Interact
public UserGroup Group; //用户组
}
+ //更新用户信息时新的用户信息。如果项值为null则不更改相应的信息
+ public class UserInfo
+ {
+ public string Password = null; //新密码
+ public string NickName = null; //新昵称
+ public string Motto = null; //新签名
+ public Image Photo = null; //新头像
+ }
+
//用户类型
public enum UserGroup
{