zoukankan      html  css  js  c++  java
  • 消息广播接受

     /// <summary>
        /// 消息广播类
        /// 此类是线程安全的
        /// </summary>
        public class Messenger
        {
            private Dictionary<string, MessengerEvents> _events;

            private static object _lockobj = new object();
            private static Messenger _messenger;
            public static Messenger Instance
            {
                get
                {
                    lock (_lockobj)
                    {
                        if (_messenger == null)
                        {
                            lock (_lockobj)
                                _messenger = new Messenger();
                        }
                    }
                    return _messenger;
                }
            }
            private Messenger()
            {
                _events = new Dictionary<string, MessengerEvents>();
            }
            /// <summary>
            /// 注册广播接收事件
            /// </summary>
            /// <param name="sign">广播标识</param>
            /// <returns></returns>
            public MessengerEvents Register(string sign)
            {
                MessengerEvents me;
                lock (_lockobj)
                {
                    if (_events.ContainsKey(sign))
                        me = _events[sign];
                    else
                    {
                        me = new MessengerEvents();
                        _events.Add(sign, me);
                    }
                }

                return me;

            }
            /// <summary>
            /// 发送广播
            /// </summary>
            /// <param name="sign">广播标识</param>
            public void Send(string sign)
            {
                lock (_lockobj)
                {
                    if (_events.ContainsKey(sign))
                    {
                        _events[sign].ExeFun();
                    }
                }

            }
            /// <summary>
            /// 发送广播
            /// </summary>
            /// <param name="sign">广播标识</param>
            /// <param name="args">广播参数</param>
            public void Send(string sign, params dynamic[] args)
            {
                lock (_lockobj)
                {
                    if (_events.ContainsKey(sign))
                    {
                        _events[sign].ExeFun(args);
                    }
                }

            }
            /// <summary>
            /// 发送广播
            /// </summary>
            /// <param name="sign">广播标识</param>
            /// <returns>返回结果</returns>
            public OperationResult SendByResult(string sign)
            {
                lock (_lockobj)
                {
                    if (_events.ContainsKey(sign))
                    {
                        return _events[sign].ExeFunResult();
                    }
                }
                return null;
            }
            /// <summary>
            /// 发送广播
            /// </summary>
            /// <param name="sign">广播标识</param>
            /// <param name="args">广播参数</param>
            /// <returns>返回结果</returns>
            public OperationResult SendByResult(string sign, params dynamic[] args)
            {
                lock (_lockobj)
                {
                    if (_events.ContainsKey(sign))
                    {
                        return _events[sign].ExeFunResult(args);
                    }
                }
                return null;
            }
        }

     #region 广播委托
        /// <summary>
        /// 没有参数的广播方法实现
        /// </summary>
        public delegate void Broadcast();
        /// <summary>
        /// 含有参数的广播方法实现
        /// </summary>
        /// <param name="args">参数</param>
        public delegate void BroadcastParams(dynamic[] args);
        public delegate OperationResult BroadcastResult();
        public delegate OperationResult BroadcastParamsResult(dynamic[] args);
        #endregion

        /// <summary>
        /// 广播事件定义类
        /// </summary>
        public class MessengerEvents
        {
            /// <summary>
            /// 无参数无返回值的广播接收事件
            /// </summary>
            public event Broadcast Receive;
            /// <summary>
            /// 含有参数无返回值的广播接收事件
            /// </summary>
            public event BroadcastParams ReceiveByParams;
            /// <summary>
            /// 无参数具有返回值的广播接收事件
            /// </summary>
            public event BroadcastResult ReceiveResult;
            /// <summary>
            /// 含有参数具有返回值的广播接收事件
            /// </summary>
            public event BroadcastParamsResult ReceiveResultByParams;

            #region 方法
            internal void ExeFun()
            {
                if (Receive != null)
                    Receive();
            }
            internal void ExeFun(params dynamic[] args)
            {
                if (ReceiveByParams != null)
                    ReceiveByParams(args);
            }

            internal OperationResult ExeFunResult()
            {
                if (Receive != null)
                    return ReceiveResult();

                return null;
            }
            internal OperationResult ExeFunResult(params dynamic[] args)
            {
                if (ReceiveByParams != null)
                    return ReceiveResultByParams(args);

                return null;
            }
            #endregion
        }

  • 相关阅读:
    Java基础知识总结(绝对经典)
    mybatis注解详解
    div行内样式style常用属性
    php中json_decode()和json_encode()的使用方法
    java调用javascript :js引擎rhino
    DeleteDC() 与 ReleaseDC() 的区别 [转]
    non-manifold Mesh(非流形网格)
    C++静态成员函数小结 [转]
    C++ 类的静态成员详细讲解[转]
    CString 转 char*; wstring 转 string
  • 原文地址:https://www.cnblogs.com/zhangxiaoshuai/p/6741950.html
Copyright © 2011-2022 走看看