Esempio n. 1
0
        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
                });
            }
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 4
0
        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);
            }
        }