コード例 #1
0
        public void SendStateChangeNotification(RPCObject target, bnet.protocol.presence.ChannelState state)
        {
            var channelState = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state);
            var notification = bnet.protocol.channel.UpdateChannelStateNotification.CreateBuilder().SetStateChange(channelState).Build();

            this.MakeTargetedRPC(target, () =>
                                 bnet.protocol.channel.ChannelSubscriber.CreateStub(this).NotifyUpdateChannelState(null, notification, callback => { }));
        }
コード例 #2
0
        /// <summary>
        /// Allows you target an RPCObject while issuing a RPC.
        /// </summary>
        /// <param name="targetObject"><see cref="RPCObject"/></param>
        /// <param name="rpc">The rpc action.</param>
        public void MakeTargetedRPC(RPCObject targetObject, Action rpc)
        {
            this._listenerId = this.GetRemoteObjectId(targetObject.DynamicId);
            Logger.Trace("[RPC: {0}] Method: {1} Target: {2} [localId: {3}, remoteId: {4}].", this, rpc.Method,
                         targetObject.ToString(), targetObject.DynamicId, this._listenerId);

            rpc();
        }
コード例 #3
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
        public RPCObject RPCGetChildObject(int limitLevel, int Index, RPCObject obj)
        {
            if (mChildObjects[Index] == null)
            {
                System.Diagnostics.Debug.WriteLine("RPCGetChildObject Indexer Over Ranged:" + Index);
                return(null);
            }

            return((RPCObject)(mChildObjects[Index].GetValue(obj, null)));
        }
コード例 #4
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
 public RPCObject RPCGetIndexerExecuter(int limitLevel, int Index, RPCObject obj, PackageProxy pkg)
 {
     if (mIndexers[Index] == null)
     {
         System.Diagnostics.Debug.WriteLine("RPCGetIndexerExecuter Indexer Over Ranged:", Index);
         return(null);
     }
     if (limitLevel < mIndexers[Index].LimitLevel)
     {
         //此处应该记录有人越权调用函数
         Log.Log.Common.Print("发现有超越权限的索引器调用");
         return(null);
     }
     return(mIndexers[Index].Execute(obj, pkg));
 }
コード例 #5
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
        public static System.Object Execute(int limitLevel, Iocp.NetConnection connect, RPCObject rootObj, PackageProxy pkg, RPCForwardInfo fwd)
        {
            if (rootObj == null)
            {
                return(null);
            }
            try
            {
                if (EntranceExecute != null)
                {
                    return(EntranceExecute(limitLevel, connect, rootObj, pkg, fwd));
                }
                else
                {
                    RPCObject curExe = rootObj;
                    for (Int16 i = 0; i < pkg.GetMaxStack(); i++)
                    {
                        if (curExe == null)
                        {
                            return(null);
                        }
                        System.Byte stk = pkg.GetStack(i);
                        if (stk == (Byte)ERPCHeader.StackUnused)
                        {
                            break;
                        }
                        else if (stk < (Byte)ERPCHeader.StackIndexBegin)
                        {
                            //curExe = curExe.RPCGetChildObject(limitLevel,stk);
                            curExe = curExe.GetRPCClassInfo().RPCGetChildObject(limitLevel, stk, curExe);
                            //curExe = (RPCObject)curExe.GetRPCClassInfo().mChildObjects[stk].GetValue(curExe,null);
                        }
                        else
                        {
                            //curExe = curExe.RPCGetIndexObject(limitLevel,stk-RPCHeader.StackIndexBegin,pkg);
                            curExe = curExe.GetRPCClassInfo().RPCGetIndexerExecuter(limitLevel, stk - (Byte)ERPCHeader.StackIndexBegin, curExe, pkg);
                        }
                    }

                    if (curExe == null)
                    {
                        return(null);
                    }
                    //return curExe.GetRPCClassInfo().RPCExecuteMethod(limitLevel,connect,pkg.GetMethod(),pkg,fwd);
                    return(curExe.GetRPCClassInfo().RPCGetMethordExecuter(limitLevel, connect, pkg.GetMethod(), curExe, pkg, fwd));
                }
            }
            catch (System.Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message + "==>");
                System.Diagnostics.Debug.WriteLine(e.StackTrace.ToString());
                Log.Log.Common.Print(e.Message + "==>");
                Log.Log.Common.Print(e.StackTrace.ToString());

                //如果发生RPC函数内部异常,尽量返回一个-128的值,免得服务器之间的调用因为没有返回WaitHandle没有机会清空
                PackageWriter retPkg = new PackageWriter();
                retPkg.Write((System.SByte)(-128));
                retPkg.DoReturnCommand2(connect, fwd.ReturnSerialId);

                return(null);
            }
        }
コード例 #6
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
 public virtual RPCObject Execute(RPCObject obj, PackageProxy pkg)
 {
     return(null);
 }
コード例 #7
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
 public System.Object RPCGetMethordExecuter(int limitLevel, Iocp.NetConnection connect, int Index, RPCObject obj, PackageProxy pkg, RPCForwardInfo fwd)
 {
     if (mMethods[Index] == null)
     {
         System.Diagnostics.Debug.WriteLine("RPCGetMethordExecuter Indexer Over Ranged:" + Index);
         return(null);
     }
     if (limitLevel < mMethods[Index].LimitLevel)
     {
         //此处应该记录有人越权调用函数
         RPCPlanesServerSpecialRoot cb = RPCNetworkMgr.Instance.mPlanesServerSpecialRoot;
         if (cb == null)
         {
             Log.Log.Common.Print("发现有超越权限的函数调用({0})", mMethods[Index].mMethodName);
             System.Diagnostics.Debug.WriteLine("发现有超越权限的函数调用({0})", mMethods[Index].mMethodName);
         }
         else
         {
             System.String str = cb.GetPlayerInfoString(fwd);
             Log.Log.Common.Print("发现有超越权限的函数调用({0}:{1})", mMethods[Index].mMethodName, str);
             System.Diagnostics.Debug.WriteLine("发现有超越权限的函数调用({0}:{1})", mMethods[Index].mMethodName, str);
         }
         return(null);
     }
     return(mMethods[Index].Execute(connect, obj, pkg, fwd));
 }
コード例 #8
0
ファイル: RPCExecuter.cs プロジェクト: 372285834/GServer
 public virtual System.Object Execute(Iocp.NetConnection connect, RPCObject obj, PackageProxy pkg, RPCForwardInfo fwd)
 {
     return(null);
 }