예제 #1
0
        private static Pluto GetPluto(MSGIDType msgId)
        {
            if (msgIdToPluto.ContainsKey(msgId))
            {
                return(msgIdToPluto[msgId]);
            }
            Pluto pluto;

            switch (msgId)
            {
            case MSGIDType.BASEAPP_CLIENT_MOVE_REQ:
                pluto = MovePluto.Create();
                break;

            case MSGIDType.BASEAPP_CLIENT_RPCALL:
            case MSGIDType.CLIENT_RPC_RESP:
                pluto = RpcCallPluto.Create();
                break;

            case MSGIDType.LOGINAPP_LOGIN:
            case MSGIDType.CLIENT_LOGIN_RESP:
                pluto = LoginPluto.Create();
                break;

            case MSGIDType.CLIENT_NOTIFY_ATTACH_BASEAPP:
                pluto = BaseLoginPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_ATTACHED:
                pluto = EntityAttachedPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_NEW_ENTITY:
                pluto = AOINewEntityPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_DEL_ENTITY:
                pluto = AOIDelEntityPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_POS_SYNC:
                pluto = OtherEntityPosSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_POS_PULL:
                pluto = OtherEntityPosPullPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_TELEPORT:
                pluto = OtherEntityPosTeleportPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_CELL_ATTACHED:
                pluto = EntityCellAttachedPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_ENTITIES:
                pluto = AOIEntitiesPluto.Create();
                break;

            case MSGIDType.CLIENT_AVATAR_ATTRI_SYNC:
                pluto = AvatarAttriSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_ATTRI_SYNC:
                pluto = OtherAttriSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_SYNC:
                pluto = EntityPosSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_PULL:
                pluto = EntityPosPullPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_TELEPORT:
                pluto = EntityPosTeleportPluto.Create();
                break;

            case MSGIDType.CLIENT_CHECK_RESP:
                pluto = CheckDefMD5Pluto.Create();
                break;

            case MSGIDType.BASEAPP_CLIENT_REFUSE_RELOGIN:
                pluto = ReConnectRefusePluto.Create();
                break;

            case MSGIDType.NOTIFY_CLIENT_DEFUSE_LOGIN:
                pluto = DefuseLoginPluto.Create();
                break;

            default:
                pluto = NotImplementedPluto.Create();
                break;
            }
            msgIdToPluto[msgId] = pluto;
            return(pluto);
        }
예제 #2
0
 /// <summary>
 /// 调用远程方法。
 /// </summary>
 /// <param name="entityName">实体名称</param>
 /// <param name="funcName">方法名称</param>
 /// <param name="args">参数列表</param>
 public override void RpcCall(string funcName, params Object[] args)
 {
     if (SomeToLocal && ToLocal(funcName, args))
     {//转发给虚拟服
         ServerProxy.m_localProxy.RpcCall(funcName, args);
         return;
     }
     try
     {
         if (funcName != "GetServerTimeReq")
             LoggerHelper.Debug("RPC: " + funcName);
         if (Pluto.CurrentEntity != null)
         {
             bool toCell = false;
             var func = Pluto.CurrentEntity.TryGetBaseMethod(funcName);
             if (func == null)
             {
                 toCell = true;
                 func = Pluto.CurrentEntity.TryGetCellMethod(funcName);
             }
             if (func != null)
             {
                 var rpcCall = new RpcCallPluto();
                 rpcCall.svrMethod = func;
                 rpcCall.toCell = toCell;
                 var result = rpcCall.Encode(args);
                 m_tcpWorker.Send(result);
             }
             else
                 LoggerHelper.Warning("RPCCall: Can not find function: " + funcName);
         }
         else
             LoggerHelper.Warning("Pluto.CurrentEntity is not set.");
     }
     catch (Exception ex)
     {
         LoggerHelper.Error("Rpc call error: " + funcName + " " + ex.Message);
     }
 }
예제 #3
0
        ///// <summary>
        ///// 将远程调用的方法解码为具体的方法调用。
        ///// </summary>
        ///// <param name="data">远程调用方法的二进制数组</param>
        public static Pluto Decode(Byte[] data)
        {
            Int32 unLen = 0;
            Pluto pluto;
            //string str = BitConverter.ToString(data, 0, data.Length);
            //LoggerHelper.Debug("pluto decode=" + str+"str length="+str.Length+"data length="+data.Length);
            var msgId = (MSGIDType)VUInt16.Instance.Decode(data, ref unLen);

            encryto.Reset();
            int len = data.Length;

            for (int i = unLen; i < len; ++i)
            {
                data[i] = encryto.Decode(data[i]);
            }
            //LoggerHelper.Debug("unLen=" + unLen + "msgid=" + msgId);
            Mogo.Util.LoggerHelper.Debug("msg_id: " + msgId);
            switch (msgId)
            {
            case MSGIDType.CLIENT_RPC_RESP:
                pluto = RpcCallPluto.Create();
                break;

            case MSGIDType.CLIENT_LOGIN_RESP:
                pluto = LoginPluto.Create();
                break;

            case MSGIDType.CLIENT_NOTIFY_ATTACH_BASEAPP:
                pluto = BaseLoginPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_ATTACHED:
                //LoggerHelper.Debug("start entity attached");
                pluto = EntityAttachedPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_NEW_ENTITY:
                pluto = AOINewEntityPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_DEL_ENTITY:
                pluto = AOIDelEntityPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_POS_SYNC:
                pluto = OtherEntityPosSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_POS_PULL:
                pluto = OtherEntityPosPullPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_TELEPORT:
                pluto = OtherEntityPosTeleportPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_CELL_ATTACHED:
                pluto = EntityCellAttachedPluto.Create();
                break;

            case MSGIDType.CLIENT_AOI_ENTITIES:
                pluto = AOIEntitiesPluto.Create();
                break;

            case MSGIDType.CLIENT_AVATAR_ATTRI_SYNC:
                pluto = AvatarAttriSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_OTHER_ENTITY_ATTRI_SYNC:
                pluto = OtherAttriSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_SYNC:
                pluto = EntityPosSyncPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_PULL:
                pluto = EntityPosPullPluto.Create();
                break;

            case MSGIDType.CLIENT_ENTITY_POS_TELEPORT:
                pluto = EntityPosTeleportPluto.Create();
                break;

            case MSGIDType.CLIENT_CHECK_RESP:
                pluto = CheckDefMD5Pluto.Create();
                break;

            case MSGIDType.BASEAPP_CLIENT_REFUSE_RELOGIN:
                pluto = ReConnectRefusePluto.Create();
                break;

            case MSGIDType.NOTIFY_CLIENT_DEFUSE_LOGIN:
                pluto = DefuseLoginPluto.Create();
                break;

            default:
                pluto = NotImplementedPluto.Create();
                break;
            }



            pluto.DoDecode(data, ref unLen);

            return(pluto);
        }