コード例 #1
0
 //绑定操作类型到类并指定回调函数
 internal static void Bind <T>() where T : BaseHandle
 {
     using (T tmp = (T)(Activator.CreateInstance(typeof(T), new byte[] { })))
     {
         HandleEnum handle = tmp.type;
         HandleLengthMapDic[handle]  = tmp.Used + tmp.Length;
         HandleDynamicMapDic[handle] = tmp.isDynamic;
         HandleRequestMapDic[handle] = tmp.isRequest;
     }
 }
コード例 #2
0
        //执行绑定映射的事件
        public int Dispose(IPEndPoint origin, byte[] value)
        {
            //Debug.Log("[节点]"+ point.LocalEndPoint + "[来源]"+ origin + "[长度]" + value.Length);
            int count = 0;

            byte[] current;
            for (int i = 0; i < value.Length; i++)
            {
                //获取当前的操作
                HandleEnum handle = FromByteToHandle(value, ref i, out current);
                //Debug.Log("获取操作"+handle+"当前委托"+ EnumActionMapDic[handle]);
                //调用映射的委托
                DisposeHandle(origin, handle, current);
                count += 1;
            }
            return(count);
        }
コード例 #3
0
        //转为指令形式,从value中的current位置开始输出数组指令到array
        internal static HandleEnum FromByteToHandle(byte[] value, ref int current, out byte[] array)
        {
            //Debug.Log("当前位置"+current);
            HandleEnum handle = ByteToHandle(value, current);

            if (handle != HandleEnum.Null)   //如果指令为空
            {
                //验证值
                //int verify = 0;
                //根据获取的类型值查询对应数组长度
                int length = HandleLengthMapDic[handle];
                //动态范围则需要加上其后续数据的长度
                if (HandleDynamicMapDic[handle])
                {
                    length += value[current + 4] + (value[current + 5] << 8) + (value[current + 6] << 16) + (value[current + 7] << 24);
                }
                //if (HandleRequestMapDic[handle])
                //{
                //    verify = value[current + 8] + (value[current + 9] << 8) + (value[current + 10] << 16) + (value[current + 11] << 24);
                //    if (point.RetryDic.TryAdd(verify, TimeMgr.TickTime))
                //    {
                //        Debug.Log("[有效请求]"+verify);
                //    }
                //}
                array = new byte[length];
                for (int i = 0; i < length; i++)
                {
                    array[i] = value[current + i];
                }
                //移动游标
                current += length - 1;
            }
            else
            {
                handle = HandleEnum.Null;
                array  = HandleToByteMapDic[HandleEnum.Null];
            }
            return(handle);
        }
コード例 #4
0
        /// <summary>
        /// Initialize the corresponding file processing object.
        /// </summary>
        /// <typeparam name="TEntity">file entity</typeparam>
        /// <param name="handleEnum">handle enum</param>
        /// <returns>handle</returns>
        private IHandle <TEntity> InitHandle <TEntity>(HandleEnum handleEnum) where TEntity : class
        {
            IHandle <TEntity> handle = null;

            switch (handleEnum)
            {
            case HandleEnum.DB:
                handle = new DBHandle <TEntity>();
                break;

            case HandleEnum.INI:
                handle = new IniHandle <TEntity>();
                break;

            case HandleEnum.JSON:
                handle = new JsonHandle <TEntity>();
                break;

            case HandleEnum.XML:
                handle = new XmlHandle <TEntity>();
                break;
            }
            return(handle);
        }
コード例 #5
0
        private void DisposeHandle(IPEndPoint origin, HandleEnum handle, byte[] value)
        {
            switch (handle)
            {
            case HandleEnum.Connect:
                if (OnConnectHandle != null)
                {
                    Dispose(point, origin, OnConnectHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.Connect);
                }
                break;

            case HandleEnum.Message:
                if (OnMessageHandle != null)
                {
                    Dispose(point, origin, OnMessageHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.Message);
                }
                break;

            case HandleEnum.ReadBuffer:
                if (OnReadBufferHandle != null)
                {
                    Dispose(point, origin, OnReadBufferHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.ReadBuffer);
                }
                break;

            case HandleEnum.WriteBuffer:
                if (OnWriteBufferHandle != null)
                {
                    Dispose(point, origin, OnWriteBufferHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.WriteBuffer);
                }
                break;

            case HandleEnum.CmdData:
                if (OnCmdDataHandle != null)
                {
                    Dispose(point, origin, OnCmdDataHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.CmdData);
                }
                break;

            case HandleEnum.RequestData:
                if (OnRequestDataHandle != null)
                {
                    Dispose(point, origin, OnRequestDataHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.RequestData);
                }
                break;

            case HandleEnum.ReplyData:
                if (OnReplyDataHandle != null)
                {
                    Dispose(point, origin, OnReplyDataHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.ReplyData);
                }
                break;

            case HandleEnum.RequestCmd:
                if (OnRequestCmdHandle != null)
                {
                    Dispose(point, origin, OnRequestCmdHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.RequestCmd);
                }
                break;

            case HandleEnum.ReplyCmd:
                if (OnReplyCmdHandle != null)
                {
                    Dispose(point, origin, OnReplyCmdHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.ReplyCmd);
                }
                break;

            case HandleEnum.Inform:
                if (OnInformHandle != null)
                {
                    Dispose(point, origin, OnInformHandle, value);
                }
                else
                {
                    Console.WriteLine("未配置" + HandleEnum.Inform);
                }
                break;

            case HandleEnum.Null:
                Console.WriteLine("未配置" + HandleEnum.Null);
                break;
            }
        }