private async Task DataOnByRead(ReadBytes read, byte runtype) { var cmd = read.ReadInt32(); if (cmd.HasValue) { var id = (read.ReadInt64()).GetValueOrDefault(-1); if (MethodInstanceDict.TryGetValue(cmd.Value, out InstanceRegister service)) { var argslen = (read.ReadInt32()).Value; if (argslen == service.ArgsLen) { object[] args = new object[argslen]; for (int i = 0; i < argslen; i++) { args[i] = base.ReadData(read, service.ArgsType[i]); } RunCall(service, cmd.Value, id, runtype, args); } else { Log.WarnFormat("call method tag :{0} Args Error: len {1}->{2} to\r\n {3}", cmd.Value, argslen, service.ArgsType.Length, service); await SendError(id, $"call method tag :{ cmd.Value} Args Error: len {argslen}->{service.ArgsType.Length} to\r\n {service}", ErrorType.ArgLenErr); } } } else { Log.WarnFormat("call read cmd error"); await SendError(-1, "not read cmd", ErrorType.NotReadCmd); } }
static void DataOn(ReadBytes read, IFiberRw <string> fiberRw) { var cmd = read.ReadInt32(); var p1 = read.ReadInt32(); var p2 = read.ReadInt64(); var p3 = read.ReadDouble(); var p4 = read.ReadSingle(); var p5 = read.ReadBoolean(); var p6 = read.ReadBoolean(); var p7 = read.ReadString(); var p8 = read.ReadMemory(); var p9 = read.ReadInt16(); // var p10 = read.ReadObject<List<Guid>>(); // read.Dispose(); using (WriteBytes writeBytes = new WriteBytes(fiberRw)) { writeBytes.WriteLen(); writeBytes.Cmd(cmd); writeBytes.Write(p1); writeBytes.Write(p2); writeBytes.Write(p3); writeBytes.Write(p4); writeBytes.Write(p5); writeBytes.Write(p6); writeBytes.Write(p7); writeBytes.Write(p8); writeBytes.Write(p9); //writeBytes.Write(p10); writeBytes.Flush(); } }
protected virtual void ReadResult(ReadBytes read) { var id = read.ReadInt64(); if (read.ReadBoolean()) //is error { AsyncBackResult(new Result() { Id = id, ErrorId = (read.ReadInt32()), ErrorMsg = read.ReadString() }); } else { var count = (read.ReadInt32()); List <byte[]> args = new List <byte[]>(count); for (int i = 0; i < count; i++) { args.Add(read.ReadArray()); } AsyncBackResult(new Result(args) { Id = id }); } }
private async Task DataOnByRead(ReadBytes read, byte runtype) { var cmd = read.ReadInt32(); var id = read.ReadInt64(); if (MethodInstanceDict.TryGetValue(cmd, out InstanceRegister service)) { var argslen = read.ReadInt32(); if (argslen == service.ArgsLen) { object[] args = new object[argslen]; for (int i = 0; i < argslen; i++) { args[i] = base.ReadData(read, service.ArgsType[i]); } RunCall(service, cmd, id, runtype, args); } else { Log.WarnFormat("call method tag :{cmd} Args Error: len {argslen}->{Length} to\r\n {service}" , cmd , argslen , service.ArgsType.Length , service); await SendError(id, $"call method tag :{ cmd} Args Error: len {argslen}->{service.ArgsType.Length} to\r\n {service}", ErrorType.ArgLenErr); } } }
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); } } }
protected virtual void ReadResult(ReadBytes read) { var id = read.ReadInt64(); if (id.HasValue) { if ((read.ReadBoolean()).Value) //is error { AsyncBackResult(new Result() { Id = id.Value, ErrorId = (read.ReadInt32()).Value, ErrorMsg = read.ReadString() }); } else { var count = (read.ReadInt32()).Value; List <byte[]> args = new List <byte[]>(count); for (int i = 0; i < count; i++) { args.Add(read.ReadArray()); } AsyncBackResult(new Result(args) { Id = id.Value }); } } else { throw new NetxException($"data error:2500", ErrorType.ReadErr); } }
private void DataOn(byte[] data, SocketAsyncEventArgs socketAsync, ZYNetRingBufferPool stream) { ReadBytes read = new ReadBytes(data); if (read.Length >= 4) { if (read.ReadInt32(out int lengt) && lengt == read.Length) { if (read.ReadByte() == 0xED && read.ReadByte() == 0xCE && read.ReadByte() == 0xFE && read.ReadByte() == 0x10) { long sessionId = read.ReadInt64(); if (sessionId == 0) { var token = MakeNewToken(socketAsync, stream, ref sessionId); if (token != null) { BufferFormat session = new BufferFormat(0x10FECEED); session.AddItem(sessionId); Send(token.Sendobj, session.Finish()); } } else { if (TokenList.TryGetValue(sessionId, out ASyncToken token)) { token.SetSocketEventAsync(socketAsync); socketAsync.UserToken = token; Log.Debug($"ReUse Token {token.SessionKey}"); } else { var _token = MakeNewToken(socketAsync, stream, ref sessionId); if (_token != null) { BufferFormat session = new BufferFormat(0x10FECEED); session.AddItem(sessionId); Send(_token.Sendobj, session.Finish()); } } } } else { Server.Disconnect(socketAsync.AcceptSocket); } } else { Server.Disconnect(socketAsync.AcceptSocket); } }
public void _LEFTConnect(ZYNetServer Server, ReadBytes read, ZYNetSession session) { long ToId; if (read.ReadInt64(out ToId)) { if (Server.SessionDiy.ContainsKey(ToId) && !string.IsNullOrEmpty(session.WANIP) && session.WANPort != 0) { ZYNetSession toUser = Server.SessionDiy[ToId]; if (toUser.Group != session.Group) { return; } if (!session.WANIP.Equals(toUser.WANIP)) //如果不再一个局域网内 { LEFTConnect tmp = new LEFTConnect() { Id = session.Id, Host = session.WANIP, Port = session.WANPort, IsSuccess = true }; Server.Send(toUser, BufferFormat.FormatFCA(tmp)); } else //同局域网内 { LEFTConnect tmp = new LEFTConnect() { Id = session.Id, Host = session.LANIP, Port = session.NatNextPort, IsSuccess = true }; Server.Send(toUser, BufferFormat.FormatFCA(tmp)); } } } }
/// <summary> /// 输入包输入回调 /// </summary> /// <param name="data"></param> /// <param name="socketAsync"></param> private void RegServer_BinaryInput(byte[] data, SocketAsyncEventArgs socketAsync) { try { if (socketAsync.AcceptSocket != null) { ReadBytes read = new ReadBytes(data); int length; int Cmd; long key; int netport; if (read.ReadInt32(out length) && length == read.Length && read.ReadInt32(out Cmd) && read.ReadInt64(out key) && read.ReadInt32(out netport)) { if (Cmd == 100) { string ip = ((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Address.ToString(); //获取外网IP地址 int port = int.Parse(((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Port.ToString()); //获取端口号 if (SessionDiy.ContainsKey(key)) //检查是否包含此KEY { SessionDiy[key].WANIP = ip; SessionDiy[key].WANPort = port; SessionDiy[key].NatNextPort = netport - 1; LLOG(string.Format("注册端口号: 客户端Id: {0} 外网IP地址: {1}:{3} 下次开放端口: {2}", key, ip, netport, port), EventLogType.INFO); RegService.SendData(socketAsync.AcceptSocket, new byte[] { 1 }); } } } } } catch (Exception er) { LLOG(er.ToString(), EventLogType.ERR); } }
static void DataOn(byte[] data, SocketAsyncEventArgs e) { Console.WriteLine("ThreadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); try { //建立一个读取数据包的类 参数是数据包 //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用 ReadBytes read = new ReadBytes(data); int lengt; //数据包长度,用于验证数据包的完整性 int cmd; //数据包命令类型 //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃 if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd)) { //read.Read系列函数是不会产生异常的 //根据命令读取数据包 switch (cmd) { case 1000: { int version = read.ReadInt32(); long data1 = read.ReadInt64(); float data2 = read.ReadFloat(); double db1 = read.ReadDouble(); bool b1 = read.ReadBoolean(); bool b2 = read.ReadBoolean(); short s1 = read.ReadInt16(); byte sb1 = read.ReadByte(); string str1 = read.ReadString(); string str2 = read.ReadString(); byte[] datax = read.ReadByteArray(); TestData tm2 = read.ReadObject <TestData>(); Console.WriteLine("int:" + version); Console.WriteLine("long:" + data1); Console.WriteLine("float:" + data2); Console.WriteLine("double:" + db1); Console.WriteLine("bool TRUE:" + b1); Console.WriteLine("bool False:" + b2); Console.WriteLine("short:" + s1); Console.WriteLine("byte:" + sb1); Console.WriteLine("string:" + str1); Console.WriteLine("string:" + str2); Console.WriteLine("bytes lengt:" + datax.Length); BufferFormat buffer = new BufferFormat(1000); buffer.AddItem(version); buffer.AddItem(data1); buffer.AddItem(data2); buffer.AddItem(db1); buffer.AddItem(b1); buffer.AddItem(b2); buffer.AddItem(s1); buffer.AddItem(sb1); buffer.AddItem(str1); buffer.AddItem(str2); buffer.AddItem(datax); TestData tmx = new TestData() { Id = 1, Data = new List <string>() { "123123", "32123123" }, Data2 = new List <Test2>() { new Test2 { A = 1, B = 2 }, new Test2 { A = 3, B = 4 } } }; buffer.AddItem(tmx); server.SendData(e.AcceptSocket, buffer.Finish()); } break; } } } catch (Exception er) { Console.WriteLine(er.ToString()); } }