protected virtual async Task DataOnByLine(IFiberRw fiberRw) { using (ReadBytes read = new ReadBytes(fiberRw)) { await read.Init(); var cmd = read.ReadInt32(); switch (cmd) { case 2000: //set session { var sessionid = (read.ReadInt64()).GetValueOrDefault(0); Log.TraceFormat("save sessionid {0}", sessionid); Session.SaveSessionId(sessionid); } break; case 2400: //Call It { await Calling(read); } break; case 2500: //set result { ReadResult(read); } break; default: throw new NetxException($"data error:{cmd.GetValueOrDefault()}", ErrorType.ReadErr); } } }
/// <summary> /// 数据包输入 /// </summary> /// <param name="data">输入数据</param> /// <param name="socketAsync">该数据包的通讯SOCKET</param> static async void BinaryInputHandler(ISockAsyncEvent socketAsync) { var fiberRw = await socketAsync.GetFiberRw <string>(); fiberRw.UserToken = "my is ttk"; for (; ;) { //try //{ // //读取 发送 测试 // var data = await fiberRw.ReadToBlockArrayEnd(); // fiberRw.Write(data); // await fiberRw.FlushAsync(); //} //catch (SocketException) //{ // break; //} //catch (Exception er) //{ // Console.WriteLine(er.ToString()); // break; //} try { //提供2种数据 读取写入方式 using (ReadBytes readBytes = new ReadBytes(fiberRw)) { await readBytes.Init(); DataOn(readBytes, fiberRw); } await DataOnByLine(fiberRw); } catch (System.Net.Sockets.SocketException) { break; } catch (Exception er) { Console.WriteLine(er.ToString()); break; } } socketAsync.Disconnect(); }
private async void SocketClient_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync) { var fiberRw = await GetFiberRw(socketAsync); try { if (fiberRw == null) { client.SetConnected(false, "ssl error"); return; } IWrite = fiberRw; if (!isConnect) { await SendVerify(); //发送KEY和sessionid验证 using ReadBytes read = new ReadBytes(fiberRw); await read.Init(); switch (read.ReadInt32()) { case 1000: //key check { var iserror = read.ReadBoolean(); if (!iserror) { Log.Trace(read.ReadString()); if (read.Memory.Length >= 1) { if (read.ReadByte() == 1) { Mode = 1; } } isConnect = true; client.SetConnected(); await GetSessionId(); await ReadIng(fiberRw); } else { var msg = read.ReadString(); Log.Info(msg); client.SetConnected(false, msg); } } break; } } client.ShutdownBoth(); } catch (Exception er) { if (!client.IsConnect) { client.SetConnected(false, er.Message); } else { Log.Error(er); client.ShutdownBoth(); } } }