protected virtual async Task ReadResultAsync(IFiberRw fiberRw) { var id = await fiberRw.ReadInt64(); if (await fiberRw.ReadBoolean()) //is error { AsyncBackResult(new Result() { Id = id, ErrorId = await fiberRw.ReadInt32(), ErrorMsg = await fiberRw.ReadString() }); } else { var count = await fiberRw.ReadInt32(); List <byte[]> args = new List <byte[]>(count); for (int i = 0; i < count; i++) { args.Add(await fiberRw.ReadArray()); } AsyncBackResult(new Result(args) { Id = id }); } }
static async ValueTask DataOnByLine(IFiberRw fiberRw) { var len = await fiberRw.ReadInt32(); var cmd = await fiberRw.ReadInt32(); var p1 = await fiberRw.ReadInt32(); var p2 = await fiberRw.ReadInt64(); var p3 = await fiberRw.ReadDouble(); var p4 = await fiberRw.ReadSingle(); var p5 = await fiberRw.ReadBoolean(); var p6 = await fiberRw.ReadBoolean(); var p7 = await fiberRw.ReadString(); using (var p8 = await fiberRw.ReadMemory()) { var p9 = await fiberRw.ReadInt16(); var p10 = await fiberRw.ReadObject <List <Guid> >(); //fiberRw.Write(len); //fiberRw.Write(cmd); //fiberRw.Write(p1); //fiberRw.Write(p2); //fiberRw.Write(p3); //fiberRw.Write(p4); //fiberRw.Write(p5); //fiberRw.Write(p6); //fiberRw.Write(p7); //fiberRw.Write(p8); //fiberRw.Write(p9); //// fiberRw.Write(p10); //await fiberRw.Flush(); } }
protected async Task <bool> DataOnByRead(IFiberRw <AsyncToken> fiberRw, int runtype) { var cmd = await fiberRw.ReadInt32(); var id = await fiberRw.ReadInt64(); if (AsyncServicesRegisterDict.TryGetValue(cmd, out MethodRegister? service)) { var argslen = await fiberRw.ReadInt32(); if (argslen == service.ArgsLen) { object[] args = new object[argslen]; List <IMemoryOwner <byte> > mem_disposetable = new List <IMemoryOwner <byte> >(); for (int i = 0; i < argslen; i++) { var(arg, owner) = await base.ReadDataAsync(fiberRw, service.ArgsType[i]); args[i] = arg; if (owner != null) { mem_disposetable.Add(owner); } } RunCall(service, cmd, id, runtype, mem_disposetable, args); return(true); } else { Log.WarnFormat("{RemoteEndPoint} call async service:{cmd} Args Error: len {argslen}->{Length} \r\n to {service}" , fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null" , cmd , argslen , service.ArgsType.Length , service); SendError(id, $"call async service:{cmd} Args Error: len {argslen}->{service.ArgsType.Length}\r\n to {service}", ErrorType.ArgLenErr); return(false); } } else { service = ActorRun.GetCmdService(cmd); if (service != null) { var argslen = await fiberRw.ReadInt32(); if (argslen == service.ArgsLen) { object[] args = new object[argslen]; List <IMemoryOwner <byte> > mem_disposetable = new List <IMemoryOwner <byte> >(); for (int i = 0; i < argslen; i++) { var(arg, owner) = await base.ReadDataAsync(fiberRw, service.ArgsType[i]); args[i] = arg; if (owner != null) { mem_disposetable.Add(owner); } } RunActor(cmd, id, runtype, mem_disposetable, args); return(true); } else { Log.WarnFormat("{RemoteEndPoint} call actor service:{cmd} Args Error: len {argslen}->{Length} \r\n to {service}" , fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null" , cmd , argslen , service.ArgsType.Length , service); SendError(id, $"call actor service:{cmd} Args Error: len {argslen}->{service.ArgsType.Length}\r\n to {service}", ErrorType.ArgLenErr); return(false); } } else { Log.WarnFormat($"{fiberRw.Async?.AcceptSocket?.RemoteEndPoint} call service:{cmd} not find cmd "); SendError(id, $"call service:{cmd} not find the cmd,please check it", ErrorType.NotCmd); return(false); } } }
protected async Task <bool> DataOnByLine(IFiberRw <AsyncToken> fiberRw) { if (fiberRw.UserToken is null) { var cmd = await fiberRw.ReadInt32(); if (cmd != 1000) { Log.TraceFormat("IP:{IPAddress} not verify key", fiberRw.Async?.AcceptSocket?.RemoteEndPoint.ToString() ?? "null"); await SendToKeyError(fiberRw, true, "not verify key!"); fiberRw.UserToken = null; return(false); } var serviceName = await fiberRw.ReadString(); if (!string.IsNullOrEmpty(ServiceOption.ServiceName)) { if (!ServiceOption.ServiceName.Equals(serviceName, StringComparison.OrdinalIgnoreCase)) { Log.TraceFormat("IP:{IPAddress} not find the service:{serviceName}", fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null", serviceName); await SendToKeyError(fiberRw, true, $"not find the service!{serviceName}"); return(false); } } var key = await fiberRw.ReadString(); if (!String.IsNullOrEmpty(OpenKey)) { if (string.Compare(OpenKey, key, StringComparison.OrdinalIgnoreCase) != 0) { Log.TraceFormat("IP:{IPAddress} verify key error:{key}", fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null", key); await SendToKeyError(fiberRw, true, "verify key error!"); return(false); } await SendToKeyError(fiberRw, msg : "verify success"); var session = await fiberRw.ReadInt64(); if (session == 0) { return(await RunCreateToken(fiberRw)); } else { if (ActorTokenDict.TryGetValue(session, out AsyncToken actorToken)) { return(await ResetToken(fiberRw, actorToken)); } else { Log.TraceFormat("IP:{IPaddress} not find sessionid:{session}", fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null", session); return(await RunCreateToken(fiberRw)); } } } else { await SendToKeyError(fiberRw, msg : "verify success"); var session = await fiberRw.ReadInt64(); if (session == 0) { return(await RunCreateToken(fiberRw)); } else { if (ActorTokenDict.TryGetValue(session, out AsyncToken actorToken)) { return(await ResetToken(fiberRw, actorToken)); } else { Log.TraceFormat("IP:{IPAddress} not find sessionid:{session}", fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null", session); return(await RunCreateToken(fiberRw)); } } } } else { Log.TraceFormat("IP:{IPAddress} token not null", fiberRw.Async?.AcceptSocket?.RemoteEndPoint?.ToString() ?? "null"); await SendToKeyError(fiberRw, true, "token not null error!"); fiberRw.UserToken = null; return(false); } }