SuperSocket教程三:自定义请求回复类

上一个教程我们可以知道
switch case 这种处理方式 始终是有限的
当你的服务端需要处理的请求头
ECHO ADD MULT …
越来越多后 且逻辑越来越复杂后
要怎么办 去看一个几万行代码的
appServer_NewRequestReceived
方法吗
显然这是不可取的 违反了软件的设计原则
我们需要降低代码的耦合度 那么我们该怎么做
例如,您可以定义一个称为“ ADD”的类去处理Key为“ ADD”的请求:
在项目下新建一个文件夹
在这里插入图片描述
新建两个类 一个处理加法一个处理乘法

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Command;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Socket.appReceive
{
    public class ADD : CommandBase<AppSession, StringRequestInfo>
    {
        public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo)
        {
            try
            {
                session.Send(requestInfo.Parameters.Select(p => Convert.ToInt32(p)).Sum().ToString());
               
            }
            catch (Exception)
            {

                Console.WriteLine("加法异常");
            }
        }
    }
}

乘法

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Command;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Socket.appReceive
{
    public class MULT : CommandBase<AppSession, StringRequestInfo>
    {
        public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo)
        {
            try
            {
                var result = 1;

                foreach (var factor in requestInfo.Parameters.Select(p => Convert.ToInt32(p)))
                {
                    result *= factor;
                }

                session.Send(result.ToString());
            }
            catch (Exception)
            {

                Console.WriteLine("乘法异常");
            }
        }
    }
}

在官方文档中 要求我们注释掉这一行
它考虑到的只是一个委托的情况
在这里插入图片描述
换上下面一行
但是这样做会影响我们思考
处理请求的委托如果有多个该怎么办
比如你把 官方的注释掉 然后用下面两个
那么 会发现 每次发送加法 乘法也会跟着一起返回
这个结果不是我们想要的 我们要的是
发送加法 返回的就是加法的值
发送乘法 返回的就是乘法的值
那么 这行还是可以继续用 而下面两行可以注释掉

在这里插入图片描述
在这个地方进行处理
大家肯定会说
你这不也是用的switchcase吗
确实 但是业务逻辑已经少了很多了
处理加法和乘法的已经变成类的形式了
那么你就是有一万个 key
那么也只需要一万行 switchcase代码
而不是几十万个 上百万行代码了
这就是解耦
那我们运行一下程序
打开服务端
在这里插入图片描述
打开客户端发送数据
在这里插入图片描述
后面的加法和除法都包含了字母
那么没有返回 服务端报了异常 和我们写的代码相符合
在这里插入图片描述
上一教程有提到过
StringRequestInfo这个信息请求包装类
那么再进一步认识一下
在这里插入图片描述
我们可以看到客户端发送的字符串是以空格间隔发送的
其实发送的是数组信息客户端用空格解析得到数组

Key就是解析后数组的第一个值
比如 ADD MULT…
后面的值就变成了参数数组
在这里插入图片描述

做加法的时候可以看到
是对拿到的数组进行Int转换然后求和的
Ok 先介绍到这里

 

(7条消息) SuperSocket教程三:自定义请求回复类_亮大大大的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值