예제 #1
0
 virtual protected object InvokeILMethodByDomain()
 {
     if (appdomain == null || appdomain.IsCleared)
     {
         DLog.LogErrorFormat("App已被清除.请检查是否有未清除的委托注册.AppName = {0},Class = {1},Method = {2}", AppName, ClassName, MethodName);
         appdomain = null;
         return(null);
     }
     try
     {
         if (method.HasThis)
         {
             return(appdomain.Invoke(method, instance, mParams));
         }
         else
         {
             return(appdomain.Invoke(method, null, mParams));
         }
     }
     catch (System.Exception _error)
     {
         DLog.LogErrorFormat("委托调用异常.AppName = {0},Class = {1},Method = {2},error = {3}", AppName, ClassName, MethodName, _error);
     }
     return(null);
 }
예제 #2
0
        private int ReadByType(SocketDataHeadType pType, byte[] pBuffer, int pOffset)
        {
            int ret = -1;

            switch (pType)
            {
            case SocketDataHeadType.type_short:
                ret = BufferBase.SReadShort(pBuffer, pOffset);
                break;

            case SocketDataHeadType.type_ushort:
                ret = BufferBase.SReadUShort(pBuffer, pOffset);
                break;

            case SocketDataHeadType.type_int:
                ret = BufferBase.SReadInt(pBuffer, pOffset);
                break;

            default:
                DLog.LogErrorFormat("ReadByType -> Type error : {0}", pType);
                break;
            }

            return(ret);
        }
예제 #3
0
        override public K GetCSLEDelegate <K>(string _Function, IType _classtype, object _target)
        {
            if (_classtype == null || _target == null)
            {
                return(default(K));
            }
            object     ret        = null;
            MethodInfo methodctor = (MethodInfo)GetLMethod(_classtype, _Function, 0);

            if (methodctor == null)
            {
                return(default(K));
            }

            try
            {
                ret = Delegate.CreateDelegate(typeof(K), _target, methodctor);
                return((K)ret);
            }
            catch (Exception _error)
            {
                DLog.LogErrorFormat("_classtype = {0},_Function = {1},error = {2}", _classtype.Name, _Function, _error);
                return(default(K));
            }
        }
예제 #4
0
        public SocketDataHeadType GetTypeAndSize(System.Type pType, out int pSize)
        {
            SocketDataHeadType ret = SocketDataHeadType.none;

            switch (pType.Name)
            {
            case "Int16":
                ret   = SocketDataHeadType.type_short;
                pSize = 2;
                break;

            case "UInt16":
                ret   = SocketDataHeadType.type_ushort;
                pSize = 2;
                break;

            case "Int32":
                ret   = SocketDataHeadType.type_int;
                pSize = 4;
                break;

            default:
                pSize = -1;
                DLog.LogErrorFormat("GetTypeAndSize -> Type error : {0}", pType.Name);
                break;
            }

            return(ret);
        }
예제 #5
0
        static byte[] LoadBytesFromBundle(string pFileName)
        {
            byte[]      ret         = null;
            string      tfullname   = GetFullPath(pFileName);
            AssetBundle tinfobundle = AssetBundle.LoadFromFile(tfullname);

            if (tinfobundle != null)
            {
                TextAsset tass = tinfobundle.LoadAsset <TextAsset>(pFileName);
                if (tass != null)
                {
                    ret = tass.bytes;
                }
                else
                {
                    DLog.LogErrorFormat("AssetBundle.LoadAsset<TextAsset>() 文件读取失败 name = {0}", tfullname);
                }
                tinfobundle.Unload(false);
            }
            else
            {
                DLog.LogError("文件读取失败 name = " + tfullname);
            }
            return(ret);
        }
예제 #6
0
            private void SetAppName(string _appname)
            {
                mAppName = _appname;
                AssetBundle tbundle = AssetBundle.LoadFromFile(GetFullPath(mAppName));

                if (tbundle != null)
                {
                    Manifest = tbundle.LoadAsset <AssetBundleManifest>("AssetBundleManifest");
                    tbundle.Unload(false);
                }
                else
                {
                    DLog.LogErrorFormat("未能加载App资源列表 AppName = {0}", mAppName);
                }
            }
예제 #7
0
 public void BeginSend(byte[] buffer, int offset, int size)
 {
     try
     {
         SocketError errorCode = SocketError.Success;
         var         ar        = socket.BeginSend(buffer, offset, size, SocketFlags.None, out errorCode, sendCallback, buffer);
         if (errorCode != SocketError.Success)
         {
             DLog.LogErrorFormat("TCP Send Error.{0}", errorCode);
         }
     }
     catch (System.Exception erro)
     {
         DLog.LogFormat("TCP Send Error.{0}", erro);
     }
 }
예제 #8
0
 public void LoadScriptFormMemory(byte[] _dllbytes, byte[] _pdbbytes)
 {
     if (mCore.SManager.ProjectLoaded)
     {
         DLog.LogError("脚本不可重复加载.");
         return;
     }
     if (_dllbytes != null && _pdbbytes != null)
     {
         mCore.SManager.LoadProjectByBytes(_dllbytes, _pdbbytes);
         StartMain(StartClass, StartFun);
     }
     else
     {
         DLog.LogErrorFormat("LoadScriptFormMemory(byte[] _dllbytes = }|,byte[] _pdbbytes){}");
     }
 }
예제 #9
0
        private void HandleRecvQueue()
        {
            recvQueue.Switch();
            while (!recvQueue.Empty())
            {
                var recvobject = recvQueue.Pop();
                int ret        = kcpObject.Input(recvobject.bytes, recvobject.length);

                cacheBytesQue.Enqueue(recvobject);

                if (ret < 0)
                {
                    //收到的不是一个正确的KCP包
                    if (IsShowDebugLog)
                    {
                        DLog.Log("Error kcp package.");
                    }
                    return;
                }

                needKcpUpdateFlag = true;

                for (int size = kcpObject.PeekSize(); size > 0; size = kcpObject.PeekSize())
                {
                    if (size > 1048576)
                    {
                        DLog.LogErrorFormat("The size is too long.size = {0}", size);
                    }
                    if (kcpRecvBuffer.Length < size)
                    {
                        int tnewlen = size + kcpRecvBuffer.Length;
                        kcpRecvBuffer = new byte[tnewlen];
                    }
                    else
                    {
                        kcpRecvBuffer.Initialize();
                    }

                    int treclen = kcpObject.Recv(kcpRecvBuffer, size);
                    if (treclen > 0)
                    {
                        PopRecData(kcpRecvBuffer, treclen);
                    }
                }
            }
        }
예제 #10
0
 override public bool Send(byte[] pBuffer, int pSize)
 {
     if (mSocket == null)
     {
         return(false);
     }
     try
     {
         SocketError errorCode = SocketError.Success;
         var         ar        = mSocket.BeginSend(pBuffer, 0, pSize, SocketFlags.None, out errorCode, sendCallBack, pBuffer);
         if (errorCode != SocketError.Success)
         {
             DLog.LogErrorFormat("TCP Send Error.{0}", errorCode);
         }
         return(errorCode == SocketError.Success);
     }
     catch (System.Exception erro)
     {
         DLog.LogFormat("TCP Send Error.{0}", erro);
     }
     return(false);
 }
예제 #11
0
        public void LoadScriptFormFile(string _filename)
        {
            if (mCore.SManager.ProjectLoaded)
            {
                DLog.LogError("脚本不可重复加载.");
                return;
            }

            byte[] dllbytes = null;
            byte[] pdbbytes = null;

            string tdllPath = mCore.AppPersistentScriptDataPath + _filename;

            if (System.IO.File.Exists(tdllPath + ".dll"))
            {
                dllbytes = System.IO.File.ReadAllBytes(tdllPath + ".dll");
                pdbbytes = System.IO.File.ReadAllBytes(tdllPath + ".pdb");
            }

            if (dllbytes == null || pdbbytes == null)
            {
                DLog.LogErrorFormat("LoadScriptFormFile{dllbytes = {0},pdbbytes = {1}}", dllbytes, pdbbytes);
                return;
            }

            AESReader tdllreader = new AESReader(dllbytes);
            AESReader tpdbreader = new AESReader(pdbbytes);

            dllbytes = tdllreader.ReadAllBytes();
            pdbbytes = tpdbreader.ReadAllBytes();

            tdllreader.Dispose();
            tpdbreader.Dispose();

            LoadScriptFormMemory(dllbytes, pdbbytes);
        }
예제 #12
0
        public byte[] GetByte(SocketDataHeadType pType, int pSrc)
        {
            byte[] ret = null;
            switch (pType)
            {
            case SocketDataHeadType.type_short:
                ret = BufferBase.GetBuffer((short)pSrc);
                break;

            case SocketDataHeadType.type_ushort:
                ret = BufferBase.GetBuffer((ushort)pSrc);
                break;

            case SocketDataHeadType.type_int:
                ret = BufferBase.GetBuffer((int)pSrc);
                break;

            default:
                DLog.LogErrorFormat("SocketData GetByte -> Type error : {0}", pType);
                break;
            }

            return(ret);
        }