上一篇已经把我们的基础通信做好了,接下来就开始创建页面与页面服务,首先来看下我们页面与页面服务的接口定义,一目清晰了然。

页面接口的定义:

   public interface IPage
    {
        string InstanceId { get; }

        bool IsPageServiceCreated { get; }

        ICoreClient CoreClient { get; }

        /// <summary>
        /// 初始化页面
        /// </summary>
        void Initialize();

        /// <summary>
        /// 关闭页面
        /// </summary>
        void Close();


        /// <summary>
        /// 调用服务方法
        /// </summary>
        /// <param name="methodName">方法名称</param>
        /// <param name="paramTypes">方法参数类型的类名列表</param>
        /// <param name="args">方法参数集合</param>
        /// <returns>返回结果</returns>
        object CallService(string methodName, string[] paramTypes, params object[] args);

        /// <summary>
        /// 单向调用服务方法(通信成功即返回,不等待方法执行)
        /// </summary>
        /// <param name="methodName">方法名称</param>
        /// <param name="paramTypes">方法参数类型的类名列表</param>
        /// <param name="args">方法参数集合</param>
        void OneWayCallService(string methodName, string[] paramTypes, params object[] args);



        /// <summary>
        /// 调用页面服务
        /// </summary>
        object CallPageService(string methodName, string[] paramTypes, params object[] args);

        /// <summary>
        /// 单向调用页面服务
        /// </summary>
        void OneWayCallPageService(string methodName, string[] paramTypes, params object[] args);

    }

页面服务接口的定义:

    public interface IPageService
    {
        /// <summary>
        /// 页面实例ID
        /// </summary>
        string InstanceId { get; }

        ISession Session { get; }

        void SetSession(ISession session);

        /// <summary>
        /// 初始化页面服务
        /// </summary>
        void Initialize();

        /// <summary>
        /// 关闭页面服务
        /// </summary>
        void Close();


        /// <summary>
        /// 回调页面客户端方法
        /// </summary>
        /// <param name="methodName">方法名称</param>
        /// <param name="paramTypes">方法参数类型的类名列表</param>
        /// <param name="args">方法参数集合</param>
        /// <returns>客户端方法返回结果</returns>
        object CallPage(string methodName, string[] paramTypes, params object[] args);

        /// <summary>
        /// 单向回调页面客户端方法(通信成功即返回,不等待方法执行)
        /// </summary>
        /// <param name="methodName">方法名称</param>
        /// <param name="paramTypes">方法参数类型的类名列表</param>
        /// <param name="args">方法参数集合</param>
        void OneWayCallPage(string methodName, string[] paramTypes, params object[] args);

        /// <summary>
        /// 销毁页面服务
        /// </summary>
        void Dispose();
    }

接下来就是页面基类的实现:

 public abstract class PageBase : ContentControl, IPage
    {
        static PageBase()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(PageBase), new FrameworkPropertyMetadata(typeof(PageBase)));
        }

        public PageBase()
        {
            if (DesignerProperties.GetIsInDesignMode(this))
                return;
            //焦点设置
            FocusManager.SetIsFocusScope(this, true);
            KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.Contained);
            this.Focusable = false;
            //事件设置
            this.Loaded += new RoutedEventHandler(PageBase_Loaded);
            this.Unloaded += new RoutedEventHandler(PageBase_Unloaded);
        }

        void PageBase_Loaded(object sender, RoutedEventArgs e)
        {
            this.Loaded -= PageBase_Loaded;
            Initialize();
        }

        void PageBase_Unloaded(object sender, RoutedEventArgs e)
        {
            this.Unloaded -= PageBase_Unloaded;
        }

        #region IPage

        public string InstanceId { get; private set; }

        public bool IsPageServiceCreated { get; private set; }

        public ICoreClient CoreClient { get; private set; }

        /// <summary>
        /// 页面服务的名称
        /// </summary>
        protected virtual string PageServiceName
        {
            get
            {
                return this.GetType().FullName;
            }
        }

        public void Initialize()
        {
            CoreClient = GL.Core.PartPlatform.Instance.GetSinglePart<ICoreClient>();
            if (!IsPageServiceCreated)
            {
                this.InstanceId = this.CoreClient.CreatePageService("GL.Service.Page1.ServicePage1");
                this.IsPageServiceCreated = true;
            }
        }

        public void Close()
        {
            this.CallService("Close", null);
        }

        public object CallService(string methodName, string[] paramTypes, params object[] args)
        {
            var request = new Request();
            request.InstanceId = this.InstanceId;
            request.MethodName = methodName;
            request.ParamTypes = paramTypes;
            request.Parameters = args.SerializeToByteArray();
            var result = this.CoreClient.CallService(request);
            return result.Value.DeserializeToObject();
        }

        public void OneWayCallService(string methodName, string[] paramTypes, params object[] args)
        {
            var request = new Request();
            request.InstanceId = this.InstanceId;
            request.MethodName = methodName;
            request.ParamTypes = paramTypes;
            request.Parameters = args.SerializeToByteArray();
            this.CoreClient.OneWayCallService(request);
        }

        public object CallPageService(string methodName, string[] paramTypes, params object[] args)
        {
            var request = new Request();
            request.InstanceId = this.InstanceId;
            request.MethodName = methodName;
            request.ParamTypes = paramTypes;
            request.Parameters = args.SerializeToByteArray();
            var result = this.CoreClient.CallPageService(request);
            return result.Value.DeserializeToObject();
        }

        public void OneWayCallPageService(string methodName, string[] paramTypes, params object[] args)
        {
            var request = new Request();
            request.InstanceId = this.InstanceId;
            request.MethodName = methodName;
            request.ParamTypes = paramTypes;
            request.Parameters = args.SerializeToByteArray();
            this.CoreClient.OneWayCallPageService(request);
        }

        #endregion
    }
View Code

相关文章:

  • 2021-09-13
  • 2021-07-28
  • 2022-12-23
  • 2021-06-09
  • 2021-08-19
  • 2021-08-05
  • 2022-12-23
  • 2021-05-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-22
  • 2021-10-20
  • 2021-09-05
相关资源
相似解决方案