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); } } }
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)); } }
/// <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); }
/// <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); }
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); } } } }
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); } } }
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); } }