v9.10.2019.0101  全面巩固批量Insert/Update/Upsert,支持数据备份、恢复和同步,支持实体列表保存到文件以及加载
大石头 authored at 2019-01-01 13:38:33
1.76 KiB
X
using NewLife.Data;
using NewLife.Http;
using NewLife.Log;
using NewLife.Messaging;

namespace Zero.WebSocketServer;

/// <summary>WebSocket处理器</summary>
public class MyWebSocketHandler : IHttpHandler
{
    /// <summary>处理请求</summary>
    /// <param name="context"></param>
    public virtual Task ProcessRequestAsync(IHttpContext context)
    {
        var ws = context.WebSocket;
        ws.MessageHandler = ProcessMessage;

        WriteLog("WebSocket连接 {0}", context.Connection?.Remote);

        return TaskEx.CompletedTask;
    }

    /// <summary>处理消息</summary>
    /// <param name="socket"></param>
    /// <param name="message"></param>
    public virtual void ProcessMessage(WebSocket socket, WsMessage message)
    {
        var remote = socket.Context?.Connection?.Remote;
        var msg = message.Payload?.ToStr();
        switch (message.Type)
        {
            case WebSocketMessageType.Text:
                WriteLog("WebSocket收到[{0}] {1}", message.Type, msg);
                // 群发所有客户端。同步处理器无法等待,弃置任务即可
                _ = socket.SendAllAsync($"[{remote}]说,{msg}");
                break;
            case WebSocketMessageType.Close:
                WriteLog("WebSocket关闭[{0}] [{1}] {2}", remote, message.CloseStatus, message.StatusDescription);
                break;
            case WebSocketMessageType.Ping:
            case WebSocketMessageType.Pong:
                WriteLog("WebSocket心跳[{0}] {1}", message.Type, msg);
                break;
            default:
                WriteLog("WebSocket收到[{0}] {1}", message.Type, msg);
                break;
        }
    }

    private void WriteLog(String format, params Object[] args) => XTrace.WriteLine(format, args);
}