Form1.cs 5.2 KB
Newer Older
若汝棋茗 已提交
1
using System;
若汝棋茗 已提交
2
using System.Text;
若汝棋茗 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using System.Windows.Forms;
using TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Http.WebSockets;
using TouchSocket.Sockets;

namespace WSClientApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void MyWSClient_Handshaked(WebSocketClientBase client, HttpContextEventArgs e)
        {
            client.Logger.Info("成功连接");
        }

24
        private WebSocketClient client;
若汝棋茗 已提交
25 26 27

        private void button1_Click(object sender, EventArgs e)
        {
28
            client.SafeDispose();
若汝棋茗 已提交
29

30 31 32
            client = new WebSocketClient();
            client.Received = this.MyWSClient_Received;
            client.Handshaked = this.MyWSClient_Handshaked;
若汝棋茗 已提交
33

34
            client.Setup(new TouchSocketConfig()
若汝棋茗 已提交
35
                .SetRemoteIPHost(this.textBox3.Text)
若汝棋茗 已提交
36
                .UsePlugin()
若汝棋茗 已提交
37 38
                .ConfigureContainer(a =>
                {
若汝棋茗 已提交
39 40 41
                    a.AddFileLogger();
                    a.AddEasyLogger(this.ShowMsg);
                })
42
                .ConfigurePlugins(a =>
若汝棋茗 已提交
43
                {
44 45 46
                    a.UseWebSocketHeartbeat()//使用心跳插件
                    .Tick(TimeSpan.FromSeconds(5));//每5秒ping一次。

若汝棋茗 已提交
47
                    a.Add<MyWSClientPlugin>();
若汝棋茗 已提交
48
                }));
49 50
            client.Connect();
            client.CloseWithWS("close");
若汝棋茗 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
        }

        private void MyWSClient_Received(WebSocketClient client, WSDataFrame dataFrame)
        {
            switch (dataFrame.Opcode)
            {
                case WSDataType.Cont:
                    client.Logger.Info($"收到中间数据,长度为:{dataFrame.PayloadLength}");
                    break;

                case WSDataType.Text:
                    client.Logger.Info(dataFrame.ToText());
                    break;

                case WSDataType.Binary:
                    if (dataFrame.FIN)
                    {
                        client.Logger.Info($"收到二进制数据,长度为:{dataFrame.PayloadLength}");
                    }
                    else
                    {
                        client.Logger.Info($"收到未结束的二进制数据,长度为:{dataFrame.PayloadLength}");
                    }
                    break;

                case WSDataType.Close:
                    {
                        client.Logger.Info("远程请求断开");
                        client.Close("断开");
                    }

                    break;

                case WSDataType.Ping:
                    break;

                case WSDataType.Pong:
                    break;

                default:
                    break;
            }
        }

        private void ShowMsg(string msg)
        {
            this.textBox1.AppendText(msg);
            this.textBox1.AppendText("\r\n");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
105
                this.client.SendWithWS(this.textBox2.Text);
若汝棋茗 已提交
106 107 108
            }
            catch (Exception ex)
            {
109
                this.client.Logger.Exception(ex);
若汝棋茗 已提交
110 111 112 113 114
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
若汝棋茗 已提交
115
            byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
若汝棋茗 已提交
116 117
            try
            {
118
                this.client.SubSendWithWS(data, 5);
若汝棋茗 已提交
119 120 121
            }
            catch (Exception ex)
            {
122
                this.client.Logger.Exception(ex);
若汝棋茗 已提交
123 124 125
            }
        }
    }
若汝棋茗 已提交
126

127
    class MyWSClientPlugin : WebSocketPluginBase<WebSocketClient>
若汝棋茗 已提交
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
    {
        protected override void OnHandleWSDataFrame(WebSocketClient client, WSDataFrameEventArgs e)
        {
            switch (e.DataFrame.Opcode)
            {
                case WSDataType.Cont:
                    client.Logger.Info($"收到中间数据,长度为:{e.DataFrame.PayloadLength}");
                    break;

                case WSDataType.Text:
                    client.Logger.Info(e.DataFrame.ToText());
                    break;

                case WSDataType.Binary:
                    if (e.DataFrame.FIN)
                    {
                        client.Logger.Info($"收到二进制数据,长度为:{e.DataFrame.PayloadLength}");
                    }
                    else
                    {
                        client.Logger.Info($"收到未结束的二进制数据,长度为:{e.DataFrame.PayloadLength}");
                    }
                    break;

                case WSDataType.Close:
                    {
                        client.Logger.Info("远程请求断开");
                        client.Close("断开");
                    }

                    break;

                case WSDataType.Ping:
                    break;

                case WSDataType.Pong:
                    break;

                default:
                    break;
            }
        }
若汝棋茗 已提交
170 171 172 173 174 175

        protected override void OnHandshaking(WebSocketClient client, HttpContextEventArgs e)
        {
            e.Context.Request.Headers["cookie"] = "";
            base.OnHandshaking(client, e);
        }
若汝棋茗 已提交
176
    }
若汝棋茗 已提交
177
}