示例#1
0
文件: Sync.cs 项目: kerwinzxc/Sync
    void CmdServerMove(int curSeq, Vector3 curPos, bool isRun, bool isRight)
    {
        int expectedSeq = ActorRun.MoveSeq + 1;

        if (curSeq < expectedSeq)
        {
            Debug.LogWarning(string.Format("[Seq Late] expectedSeq:{0}, receive:{1}", expectedSeq, curSeq));
        }
        else if (curSeq > expectedSeq)
        {
            Debug.LogWarning(string.Format("[Seq Lost] expectedSeq:{0}, receive:{1}", expectedSeq, curSeq));
        }

        if (isRun)
        {
            ActorRun.StartRun(isRight);
        }
        else
        {
            ActorRun.StopRun();
        }
        ActorRun.MoveStep(Time.fixedDeltaTime);
        CheckCheat(curPos);

        SetDirtyBit(0xffffffff);
    }
示例#2
0
文件: Sync.cs 项目: kerwinzxc/Sync
    void SendAdjustOwner()
    {
        AdjustSnapShot snapShot = new AdjustSnapShot();

        ActorRun.GetSnapShot(ref snapShot);
        RpcAdjustOwner(snapShot.seq, snapShot.pos, snapShot.isRun, snapShot.isRight, snapShot.speed);
    }
示例#3
0
文件: Sync.cs 项目: kerwinzxc/Sync
    public override void OnDeserialize(NetworkReader reader, bool initialState)
    {
        Vector3 pos = Vector3.zero;
        Vector3 vel = Vector3.zero;

        pos = reader.ReadVector3();
        vel = reader.ReadVector3();
        if (!IsOwner)
        {
            ActorRun.OnRecvNew(pos, vel);
        }
    }
示例#4
0
文件: Sync.cs 项目: kerwinzxc/Sync
    void RpcAdjustOwner(int seq, Vector3 dsPos, bool isRun, bool isRight, float speed)
    {
        if (!IsOwner)
        {
            return;
        }
        Debug.LogWarning("AdjustOwner Player By DS at seq:" + seq);

        m_ownerOperateRecords.RemoveAllLessThen(seq);

        ActorRun.ResetByDS(seq, dsPos, isRun, isRight, speed);

        ActorRun.AdjustMove(m_ownerOperateRecords);
    }
示例#5
0
 public T Actor <T>()
 {
     return(ActorRun.Get <T>());
 }
示例#6
0
        protected virtual async void RunActor(int cmd, long id, int runtype, List <IMemoryOwner <byte> > memoryOwners, params object[] args)
        {
            try
            {
                switch (runtype)
                {
                case 0:
                    {
                        ActorRun.SyncAction(id, cmd, OpenAccess.Public, args);
                        Dispose_table(memoryOwners);
                    }
                    break;

                case 1:
                {
                    await ActorRun.AsyncAction(id, cmd, OpenAccess.Public, args);

                    Dispose_table(memoryOwners);
                    await SendResult(id);
                }
                break;

                case 2:
                {
                    var ret_value = await ActorRun.CallFunc <object>(id, cmd, OpenAccess.Public, args);

                    Dispose_table(memoryOwners);
                    switch (ret_value)
                    {
                    case Result result:
                    {
                        result.Id = id;
                        await SendResult(result);
                    }
                    break;

                    default:
                    {
                        await SendResult(id, ret_value);
                    }
                    break;
                    }
                }
                break;
                }
            }
            catch (System.Net.Sockets.SocketException)
            {
            }
            catch (NetxException er)
            {
                if (er.ErrorType != ErrorType.ActorQueueMaxErr)
                {
                    Log.Error("Actor Server Err:", er);
                }
                SendError(id, $"Actor Server Err:{er.Message}", ErrorType.CallErr);
            }
            catch (Exception er)
            {
                Log.Error("Actor Server Err:", er);
                SendError(id, $"Actor Server Err:{er.Message}", ErrorType.CallErr);
            }
        }
示例#7
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);
                }
            }
        }