Ejemplo n.º 1
0
        public sealed override object ReadReturn(ref NetCore.PkgReader pkg)
        {
            R temp = new R();

            OnReadReturn(ref temp, ref pkg);
            return(temp);
        }
Ejemplo n.º 2
0
        protected virtual void OnReadArugment(ref T obj, ref NetCore.PkgReader pkg)
        {
            object temp = new T();

            IO.Serializer.SerializerHelper.ReadObject(temp, pkg);
            obj = (T)temp;
        }
Ejemplo n.º 3
0
            protected override void OnReadArugment(ref ArgumentData obj, ref NetCore.PkgReader pkg)
            {
                //string tmp;
                //pkg.Read(out tmp);
                //obj.ReporterName = tmp;

                //int count = 0;
                //pkg.Read(out count);
                //obj.Scopes = new List<Profiler.PerfViewer.PfValue_PerfCounter>();
                //for (int i = 0; i < count; i++)
                //{
                //    var cur = new Profiler.PerfViewer.PfValue_PerfCounter();
                //    pkg.Read(out tmp);
                //    cur.Name = tmp;
                //    UInt32 hash = 0;
                //    pkg.Read(out hash);
                //    cur.NameHash = hash;
                //    int tmTime = 0;
                //    pkg.Read(out tmTime);
                //    cur.AvgTime = tmTime;
                //    pkg.Read(out tmTime);
                //    cur.AvgHit = tmTime;

                //    obj.Scopes.Add(cur);
                //}
                base.OnReadArugment(ref obj, ref pkg);
            }
Ejemplo n.º 4
0
        protected virtual void OnReadReturn(ref R obj, ref NetCore.PkgReader pkg)
        {
            object temp = new R();

            IO.Serializer.SerializerHelper.ReadObject(temp, pkg);
            obj = (R)temp;
        }
Ejemplo n.º 5
0
        public virtual object Execute(object host, ref NetCore.PkgReader pkg, UInt16 serialId, NetCore.NetConnection connect, ref NetCore.RPCRouter.RouteData routeInfo)
        {
            var parameter = CreateArgument();

            IO.Serializer.SerializerHelper.ReadObject(parameter, pkg);

            var args = new object[] { pkg.GetUserFlags(), parameter, serialId, connect, routeInfo };

            return(Method.Invoke(host, args));
        }
Ejemplo n.º 6
0
 protected virtual void OnReadReturn(ref NetCore.PkgReader pkg, ref R data)
 {
     unsafe
     {
         fixed(R *p = &data)
         {
             pkg.ReadPtr(p, sizeof(R));
         }
     }
 }
Ejemplo n.º 7
0
 protected virtual void OnReadArgument(ref NetCore.PkgReader pkg, ref T data)
 {
     unsafe
     {
         fixed(T *p = &data)
         {
             pkg.ReadPtr(p, sizeof(T));
         }
     }
 }
Ejemplo n.º 8
0
        public sealed override object Execute(object host, ref NetCore.PkgReader pkg, UInt16 serialId, NetCore.NetConnection connect, ref NetCore.RPCRouter.RouteData routeInfo)
        {
            unsafe
            {
                T arg = new T();
                OnReadArugment(ref arg, ref pkg);

                return(OnCallMethod(host, pkg.GetUserFlags(), ref arg, serialId, connect, ref routeInfo));
            }
        }
Ejemplo n.º 9
0
            protected override void OnReadReturn(ref NetCore.PkgReader pkg, ref S2C_TestAwait.ReturnData data)
            {
                int a1 = 0;

                pkg.Read(out a1);
                data.A1 = a1;

                var obj = new TestStructRLE();

                IO.StructCompress <TestStructRLE, NetCore.PkgWriter, NetCore.PkgReader> .Instance.Read(
                    ref pkg, ref obj);
            }
Ejemplo n.º 10
0
        public void DoCallBack(UInt16 serialId, ref NetCore.PkgReader data)
        {
            lock (WaitCallBacks)
            {
                RPCWait wait;
                if (WaitCallBacks.TryGetValue(serialId, out wait))
                {
                    WaitCallBacks.Remove(serialId);
#if PWindow
                    var saved = System.Threading.SynchronizationContext.Current;
                    System.Threading.SynchronizationContext.SetSynchronizationContext(null);
                    wait.RetCallBack(ref data, false);
                    System.Threading.SynchronizationContext.SetSynchronizationContext(saved);
#else
                    wait.RetCallBack(ref data, false);
#endif
                    RPCWaitAllocator.ReleaseObject(wait);
                }
            }
        }
Ejemplo n.º 11
0
 public virtual unsafe void UnsafeReadReturn(ref NetCore.PkgReader pkg, void *arg)
 {
 }
Ejemplo n.º 12
0
 public virtual object ReadReturn(ref NetCore.PkgReader pkg)
 {
     return(null);
 }
Ejemplo n.º 13
0
        public sealed override unsafe void UnsafeReadReturn(ref NetCore.PkgReader pkg, void *arg)
        {
            R *pArg = (R *)arg;

            OnReadReturn(ref pkg, ref *pArg);
        }
Ejemplo n.º 14
0
 public static void NullCB(ref NetCore.PkgReader data, bool isTimeOut)
 {
 }
Ejemplo n.º 15
0
        public object Execute(ref NetCore.PkgReader pkg, NetCore.NetConnection connect, ref NetCore.RPCRouter.RouteData routeInfo)
        {
            UInt16 rpcIndex    = 0;
            UInt32 rpcHash     = 0;
            bool   hasReturn   = false;
            bool   isHashIndex = pkg.IsHashIndex();

            if (isHashIndex)
            {
                hasReturn = pkg.IsHasReturn();
                pkg.Read(out rpcHash);
            }
            else
            {
                pkg.Read(out rpcIndex);
                hasReturn = (rpcIndex & WaitFlag) != 0 ? true : false;
            }
            if (hasReturn != pkg.IsHasReturn())
            {
                System.Diagnostics.Debug.Assert(false);
            }
            UInt16 serialId = 0;

            if (hasReturn)
            {
                pkg.Read(out serialId);
                rpcIndex = (UInt16)(rpcIndex & MaxRPC);
            }
            RPCProcessor exec = null;

            if (isHashIndex)
            {
                exec = GetExecByHash(rpcHash);
            }
            else
            {
                exec = GetExecByIndex(rpcIndex);
            }
            if (exec == null)
            {
                System.Diagnostics.Debug.WriteLine($"RPC GetExecByIndex is null:{rpcIndex}");
                return(null);
            }
            object host = exec.GetHostObject(ref routeInfo);

            if (host == null)
            {
                System.Diagnostics.Debug.WriteLine($"RPC HostObject is null:{exec.GetType().FullName}");
                return(null);
            }
            var authority = exec.GetAuthority(host);

            if (authority < exec.CallAttr.LimitLevel)
            {//超越权限
                //System.Diagnostics.Debug.WriteLine($"Over Authority[{authority}<{exec.CallAttr.LimitLevel.ToString()}]:{parameter.GetHostObjectName()}=>{parameter.GetRPCMethod().Name}");
                return(null);
            }

            try
            {
                //这里如果反射调用就有GC,生成代码可以去掉GC
                return(exec.Execute(host, ref pkg, serialId, connect, ref routeInfo));
            }
            catch (Exception ex)
            {
                Profiler.Log.WriteException(ex);
                return(null);
            }
            finally
            {
            }
        }
Ejemplo n.º 16
0
        public void ReceiveData(NetCore.NetConnection sender, byte[] pData, int nLength, Int64 recvTime)
        {
            unsafe
            {
                if (nLength < sizeof(NetCore.PkgHeader))
                {
                    return;
                }
            }

            var router = sender.Router as NetCore.RPCRouter;

            if (router == null)
            {
                System.Diagnostics.Debug.WriteLine($"connect bind a invalid data");
                return;
            }
            var pkg = new NetCore.PkgReader(pData, nLength, recvTime);

            try
            {
                if (PkgRcver != null)
                {
                    PkgRcver.OnReceivePackage(sender, pkg);
                }

                byte route = 0;
                pkg.Read(out route);
                var isReturn = (route & (byte)NetCore.ERouteTarget.ReturnFlag) != 0 ? true : false;
                route = (byte)(route & (byte)NetCore.ERouteTarget.ReturnMask);
                var target = (NetCore.ERouteTarget)route;
                switch (target)
                {
                case NetCore.ERouteTarget.Self:
                {
                    if (isReturn)
                    {
                        UInt16 serialId = 0;
                        pkg.Read(out serialId);
                        DoCallBack(serialId, ref pkg);
                    }
                    else
                    {
                        Execute(ref pkg, sender, ref router.RouteInfo);
                    }
                }
                break;

                case NetCore.ERouteTarget.Routed:
                {
                    var routeInfo = new NetCore.RPCRouter.RouteData();
                    routeInfo.Load(ref pkg);
                    Execute(ref pkg, sender, ref routeInfo);
                }
                break;

                case NetCore.ERouteTarget.Client:
                {        //只有GateServer才有转发到客户端的需求
#if Server
                    var routePkg  = new PkgWriter();
                    var routeInfo = new RPCRouter.RouteData();
                    try
                    {
                        routeInfo.Load(pkg);
                        if (Titan3D.Server.IGateServer.Instance != null)
                        {
                            if (isReturn)
                            {
                                route = (byte)((byte)ERouteTarget.Self | (byte)ERouteTarget.ReturnFlag);
                                routePkg.Write(route);
                                UInt16 seriaId;
                                pkg.Read(out seriaId);
                                routePkg.Write(seriaId);
                            }
                            else
                            {
                                route = (byte)ERouteTarget.Self;
                                routePkg.Write(route);
                            }

                            routePkg.AppendPkg(pkg, pkg.GetPosition());
                            routePkg.SendBuffer(Titan3D.Server.IGateServer.Instance.GetClientConnect(routeInfo.RouteSlot));
                        }
                    }
                    finally
                    {
                        routePkg.Dispose();
                    }
#endif
                }
                break;

                case NetCore.ERouteTarget.Hall:
                {
                    var routePkg = new NetCore.PkgWriter(nLength + 64);
                    try
                    {
                        routePkg.Write((byte)NetCore.ERouteTarget.Routed);
                        router.RouteInfo.Save(ref routePkg, NetCore.ERouteTarget.Hall);
                        routePkg.SetFlags(pkg.GetFlags());
                        routePkg.AppendPkg(pkg, pkg.GetPosition());
                        routePkg.SendBuffer(RouterTargetConnect(target, router));
                    }
                    finally
                    {
                        routePkg.Dispose();
                    }
                }
                break;

                case NetCore.ERouteTarget.Data:
                case NetCore.ERouteTarget.Keep:
                case NetCore.ERouteTarget.Reg:
                case NetCore.ERouteTarget.Path:
                case NetCore.ERouteTarget.Log:
                {
                    var routePkg = new NetCore.PkgWriter(nLength + 64);
                    try
                    {
                        routePkg.Write((byte)NetCore.ERouteTarget.Routed);
                        router.RouteInfo.Save(ref routePkg, target);
                        routePkg.SetFlags(pkg.GetFlags());
                        routePkg.AppendPkg(pkg, pkg.GetPosition());
                        routePkg.SendBuffer(GetServerConnect(target));
                    }
                    finally
                    {
                        routePkg.Dispose();
                    }
                }
                break;
                }
            }
            finally
            {
                pkg.Dispose();
            }
        }