Merge branch 'master' of http://git.newlifex.com/NewLife/X
大石头 编写于 2018-09-25 18:53:17
X
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using NewLife.Data;
using NewLife.Net;

namespace NewLife.Remoting
{
    /// <summary>API控制器</summary>
    //[AllowAnonymous]
    public class ApiController
    {
        /// <summary>主机</summary>
        public IApiHost Host { get; set; }

        private String[] _all;
        /// <summary>获取所有接口</summary>
        /// <returns></returns>
        public String[] All()
        {
            // 加上10ms延迟来模拟业务损耗,测试消耗占95.63%。没加睡眠时,Json损耗占55.5%
            //System.Threading.Thread.Sleep(10);
            if (_all != null) return _all;

            var list = new List<String>();
            foreach (var item in Host.Manager.Services)
            {
                var act = item.Value;

                var mi = act.Method;

                var sb = new StringBuilder();
                sb.AppendFormat("{0} {1}", mi.ReturnType.Name, act.Name);
                sb.Append("(");

                var pis = mi.GetParameters();
                for (var i = 0; i < pis.Length; i++)
                {
                    if (i > 0) sb.Append(", ");
                    sb.AppendFormat("{0} {1}", pis[i].ParameterType.Name, pis[i].Name);
                }

                sb.Append(")");

                var des = mi.GetDescription();
                if (!des.IsNullOrEmpty()) sb.AppendFormat(" {0}", des);

                list.Add(sb.ToString());
            }

            return _all = list.ToArray();
        }

        /// <summary>服务器信息,用户健康检测</summary>
        /// <returns></returns>
        public Object Info()
        {
            var ctx = ControllerContext.Current;
            var ns = ctx?.Session as INetSession;

            var rs = new
            {
                Environment.MachineName,
                Environment.UserName,
                Time = DateTime.Now,
                LocalIP = NetHelper.MyIP() + "",
                Remote = ns?.Remote?.EndPoint + "",
            };
            return rs;
        }

#if DEBUG
        ///// <summary>获取指定种类的环境信息</summary>
        ///// <param name="kind"></param>
        ///// <returns></returns>
        //public String Info(String kind)
        //{
        //    switch ((kind + "").ToLower())
        //    {
        //        case "machine": return Environment.MachineName;
        //        case "user": return Environment.UserName;
        //        case "ip": return NetHelper.MyIP() + "";
        //        case "time": return DateTime.Now.ToFullString();
        //        default:
        //            throw new ApiException(505, "不支持类型" + kind);
        //    }
        //}

        ///// <summary>加密数据</summary>
        ///// <param name="data"></param>
        ///// <returns></returns>
        //public Packet Encrypt(Packet data)
        //{
        //    //Log.XTrace.WriteLine("加密数据{0:n0}字节", data.Total);

        //    var buf = Security.RC4.Encrypt(data.ToArray(), "NewLife".GetBytes());

        //    return buf;
        //}
#endif
    }
}