コード例 #1
0
        public void OnRecieve(HostRecieveEventArgs e)
        {
            // 此demo进行了一次简单的定长数据获取示例
            if (_data)
            {
                // 数据模式

                // 输出内容
                Console.WriteLine($"-> 接受数据 -> {e.Content}");

                // 测试协议,原封内容发回客户端
                ServerHostRecieveEventArgs args = (ServerHostRecieveEventArgs)e;
                args.Entity.Send($"${e.Content.Length}\r\n{e.Content}");
            }
            else
            {
                //命令模式

                // 输出内容
                Console.WriteLine($"-> 接受定义命令 -> {e.Content}");

                //此处以$开头定义数据长度
                if (e.Content.StartsWith("$"))
                {
                    _data = true;
                    int len = int.Parse(e.Content.Substring(1));

                    // 输出内容
                    Console.WriteLine($"-> 定义数据长度:{len}");

                    ServerHostRecieveEventArgs args = (ServerHostRecieveEventArgs)e;
                    args.Entity.SetDataMode(len);
                }
            }
        }
コード例 #2
0
        public void OnRecieve(HostRecieveEventArgs e)
        {
            // 此demo进行了一次简单的定长数据获取示例
            ServerHostRecieveEventArgs args = (ServerHostRecieveEventArgs)e;

            if (args.Entity.DataMode)
            {
                // 数据模式
                OnRecieveData(args, this.Command, e.Content);
            }
            else
            {
                // 命令模式
                OnRecieveCommand(args, e.Content.Substring(0, 1), e.Content.Substring(1));
            }
        }
コード例 #3
0
 /// <summary>
 /// 检测存储对象
 /// </summary>
 /// <param name="e"></param>
 /// <returns></returns>
 private bool CheckStorageEntity(HostRecieveEventArgs e)
 {
     // 当交互存储不存在时,触发致命错误
     if (this.StorageEntity == null)
     {
         if (Server.IsDebug)
         {
             Console.WriteLine($"> 进行{e.Content}业务时发生致命错误:交互存储不存在");
         }
         var args = (ServerHostRecieveEventArgs)e;
         this.SendFail(args, "None Sid");
         System.Threading.Thread.Sleep(10);
         args.Entity.Close();
         return(false);
     }
     return(true);
 }
コード例 #4
0
 /// <summary>
 /// 检测登录状态
 /// </summary>
 /// <param name="e"></param>
 /// <returns></returns>
 private bool CheckLogin(HostRecieveEventArgs e)
 {
     // 当交互存储不存在时,触发致命错误
     if (!this.IsLogin)
     {
         if (Server.IsDebug)
         {
             Console.WriteLine($"> 进行{e.Content}业务时发生致命错误:尚未登录");
         }
         var args = (ServerHostRecieveEventArgs)e;
         this.SendFail(args, "Need Login");
         System.Threading.Thread.Sleep(10);
         args.Entity.Close();
         return(false);
     }
     return(true);
 }
コード例 #5
0
            public void OnRecieve(HostRecieveEventArgs e)
            {
                // 此demo进行了一次简单的定长数据获取示例
                ClientHostRecieveEventArgs args = (ClientHostRecieveEventArgs)e;

                if (args.Client.DataMode)
                {
                    // 数据模式
                    args.ResultData = _sign + e.Content;
                    args.Result     = HostEventResults.Finished;
                }
                else
                {
                    // 命令模式
                    // 此处以+开头定义成功的数据
                    // 此处以-开头定义失败的数据
                    if (e.Content.StartsWith("+") || e.Content.StartsWith("-"))
                    {
                        _sign = e.Content.Substring(0, 1);

                        // 获取内容长度
                        int len = int.Parse(e.Content.Substring(1));

                        // 当长度为0时直接返回,否则设置数据模式
                        if (len <= 0)
                        {
                            args.ResultData = _sign;
                            args.Result     = HostEventResults.Finished;
                        }
                        else
                        {
                            args.Client.SetDataMode(len);
                        }
                    }
                }
            }
コード例 #6
0
ファイル: ClientHost.cs プロジェクト: dpzsoft/dotnet-core-ssr
        public void OnRecieve(HostRecieveEventArgs e)
        {
            // 此demo进行了一次简单的定长数据获取示例
            if (_data)
            {
                // 数据模式

                // 输出内容
                Console.WriteLine($"-> 接受数据 -> {e.Content}");

                // 测试协议,原封内容发回客户端
                ClientHostRecieveEventArgs args = (ClientHostRecieveEventArgs)e;
                args.ResultData = e.Content;
                args.Result     = HostEventResults.Finished;
            }
            else
            {
                //命令模式

                // 输出内容
                Console.WriteLine($"-> 接受定义命令 -> {e.Content}");

                //此处以$开头定义数据长度
                if (e.Content.StartsWith("$"))
                {
                    _data = true;
                    int len = int.Parse(e.Content.Substring(1));

                    // 输出内容
                    Console.WriteLine($"-> 定义数据长度:{len}");

                    ClientHostRecieveEventArgs args = (ClientHostRecieveEventArgs)e;
                    args.Client.SetDataMode(len);
                }
            }
        }
コード例 #7
0
        public void OnRecieve(HostRecieveEventArgs e)
        {
            // 日志式输出
            var args = (ServerHostRecieveEventArgs)e;

            if (Server.IsDebug)
            {
                Console.WriteLine($"[{Time.GetTimeString()}] --> [{(args.Entity.DataMode ? "D" : "C")}] {e.Content}");
            }

            // 判断业务宿主是否为空
            if (_host == null)
            {
                switch (e.Content)
                {
                // 登录业务
                case "PWD":
                    _host = new Hosts.Pwd(this);
                    break;

                // 操作交互标识业务
                case "SID":
                    // 检测登录状态
                    if (!CheckLogin(e))
                    {
                        return;
                    }
                    _host = new Hosts.Sid(this);
                    break;

                // 设置业务
                case "SET":
                    // 检测登录状态
                    if (!CheckLogin(e))
                    {
                        return;
                    }
                    // 检测存储对象
                    if (!CheckStorageEntity(e))
                    {
                        return;
                    }
                    _host = new Hosts.Set(this);
                    break;

                // 获取业务
                case "GET":
                    // 检测登录状态
                    if (!CheckLogin(e))
                    {
                        return;
                    }
                    // 检测存储对象
                    if (!CheckStorageEntity(e))
                    {
                        return;
                    }
                    _host = new Hosts.Get(this);
                    break;

                default:
                    if (Server.IsDebug)
                    {
                        Console.WriteLine($"> 不支持的业务类型:{e.Content}");
                    }
                    break;
                }
            }
            else
            {
                // 存在业务宿主则直接将事件传递给业务宿主
                _host.OnRecieve(e);
            }
        }