数据结构:Socket_Study_Model
Socket_Study_Model 数据结构层,定义了客户端与服务端之间交互的所有消息模型、枚举类型和通用消息格式,基于 JSON 序列化实现跨端数据传输,所有消息均通过统一的 MessageStyle 格式封装。
后期拓展就添加 [XXXXX]Model 然后服务和客户端都可以引用了。
欢迎消息-WelComMessageModel
服务端向新连接客户端发送的欢迎消息模型,是客户端建立连接后接收的首个消息。
using System;
namespace Socket_Study_Model
{
/// <summary>
/// 欢迎消息的model
/// </summary>
[Serializable]
public class WelComMessageModel
{
/// <summary>
/// 欢迎消息
/// </summary>
public string Message { get; set; }
public WelComMessageModel(string message)
{
Message = message;
}
}
}
StandMessageModel
标准消息模型,用于简单的点对点文本消息、系统提示、操作结果等基础消息,最常用的消息载体。
using System;
namespace Socket_Study_Model
{
/// <summary>
/// 标准消息
/// </summary>
[Serializable]
public class StandMessageModel
{
public string SenderClientId { get; set; }
public string TargetClientID { get; set; }
public string Message { get; set; }
public string SenderName { get; set; }
public StandMessageModel(string senderId, string targetId, string message)
{
SenderClientId = senderId;
TargetClientID = targetId;
Message = message;
}
}
}
OnlineUserModel.cs
在线用户相关模型,包含单个在线用户信息和在线列表响应结构,用于响应客户端的在线列表查询请求。
using System.Collections.Generic;
using System;
namespace Socket_Study_Model
{
/// <summary>
/// 在线用户信息模型
/// </summary>
public class OnlineUserModel
{
/// <summary>
/// 客户端ID
/// </summary>
public string ClientId { get; set; }
/// <summary>
/// 用户名(未设置则显示"未命名")
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 最后活跃时间
/// </summary>
public DateTime LastActiveTime { get; set; }
}
/// <summary>
/// 在线列表响应模型
/// </summary>
public class OnlineListResponseModel
{
/// <summary>
/// 在线用户总数
/// </summary>
public int TotalCount { get; set; }
/// <summary>
/// 在线用户列表
/// </summary>
public List<OnlineUserModel> Users { get; set; } = new List<OnlineUserModel>();
}
}
MessageTypeEnum
消息类型,用于在MessageStyle 设置消息类型
namespace Socket_Study_Model
{
/// <summary>
/// 消息类型枚举
/// </summary>
public enum MessageTypeEnum
{
/// <summary>
/// 未知类型
/// </summary>
Unknown = 0,
/// <summary>
/// 欢迎消息
/// </summary>
Welcome = 1,
/// <summary>
/// 普通文本消息
/// </summary>
Text = 2,
/// <summary>
/// 广播消息
/// </summary>
Broadcast = 3,
/// <summary>
/// 心跳消息
/// </summary>
Heartbeat = 4,
/// <summary>
/// 私信
/// </summary>
PrivateMsg = 5,
/// <summary>
/// 设置用户名
/// </summary>
SetUserName = 6,
/// <summary>
/// 请求用户列表
/// </summary>
ListRequest = 7,
}
}
MessageStyle
全局统一的消息格式封装类,是客户端与服务端之间传输的唯一消息载体。所有业务消息(如 StandMessageModel、BroadcastMessageModel)均序列化为字符串后存入 Message 字段,通过 Type 字段标识业务类型,实现消息的标准化传输。
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Socket_Study_Model
{
/// <summary>
/// 消息类型
/// </summary>
[System.Serializable] public class MessageStyle
{
/// <summary>
/// 消息类型
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public MessageTypeEnum Type { get; set; }
/// <summary>
/// 对应 "clientId"
/// </summary>
public string ClientId { get; set; }
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
public MessageStyle(string clientId, string message, MessageTypeEnum messageTypeEnum = MessageTypeEnum.Text)
{
Type = messageTypeEnum;
ClientId = clientId;
Message = message;
}
}
}
消息广播模型-BroadcastMessageModel
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Socket_Study_Model
{
/// <summary>
/// 广播消息模型
/// </summary>
[System.Serializable]
public class BroadcastMessageModel
{
/// <summary>
/// 消息类型
/// </summary>
[JsonConverter(typeof(StringEnumConverter))] public BroadcastMessageType MessageType { get; set; }
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 发送者信息
/// </summary>
public string SenderClientId { get; set; }
/// <summary>
/// 发送时间
/// </summary>
public System.DateTime SendTime { get; set; } = System.DateTime.Now;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="senderClientId">发送者id</param>
/// <param name="messageType">消息类型</param>
public BroadcastMessageModel(string message,
string senderClientId,
BroadcastMessageType messageType = BroadcastMessageType.UserMessage)
{
MessageType = messageType;
Message = message;
SenderClientId = senderClientId;
}
}
/// <summary>
/// 广播的消息类型
/// </summary>
public enum BroadcastMessageType
{
/// <summary>
/// 用户消息
/// </summary>
UserMessage = 0,
/// <summary>
/// 警告消息
/// </summary>
Warning = 1,
/// <summary>
/// 错误消息
/// </summary>
Error = 2,
/// <summary>
/// 状态更新
/// </summary>
StatusUpdate = 3,
}
}
565

被折叠的 条评论
为什么被折叠?



