精华内容
下载资源
问答
  • VS C# 消息通知中心,实现在代码的任何地方向窗体发消息,零耦合,调用简单,具体看源码
  • 本篇文章主要讲述Unity3D中客户端消息机制的实现。 ·消息通信在游戏各个模块中应该很方便调用,而且需要降低模块之间的耦合。 ·代码精炼 ·易维护 现在直接上代码 1 using System; 2 public class ...

    本篇文章主要讲述Unity3D中客户端消息机制的实现。

    ·消息通信在游戏各个模块中应该很方便调用,而且需要降低模块之间的耦合。

    ·代码精炼

    ·易维护

    现在直接上代码

     1 using System;
     2 public class Notification
     3 {
     4     public Enum Type { set; get; }
     5 
     6     public Object[] Params { set; get; }
     7 
     8     public Object Target { set; get; }
     9 
    10     public Notification()
    11     {
    12 
    13     }  
    14 }
     1 using System;
     2 [AttributeUsage(AttributeTargets.Method)]
     3 public class Subscribe : Attribute
     4 {
     5     protected Object m_Type { set; get; }
     6     public Subscribe(Object type)
     7     {
     8         m_Type = type;
     9     }
    10     public Enum GetSubscription()
    11     {
    12         return (Enum)m_Type;
    13     }       
    14 }
      1 using System;
      2 using System.Collections;
      3 using System.Collections.Generic;
      4 using System.Reflection;
      5 
      6 public class Notifier
      7 {
      8     Dictionary<Enum, Action<Notification>> m_DictAction = new Dictionary<Enum, Action<Notification>>();
      9     Object m_Target = null;
     10     byte m_LifeState = 1;
     11     public Notifier() 
     12     {
     13         m_Target = this;
     14         Init();
     15     }
     16     public Notifier(Object target)
     17     {
     18         if (target == null)
     19             throw new Exception("Target is null,please use New Notifier() instead");
     20         m_Target = target;
     21         Init();
     22     }
     23 
     24     void Init()
     25     {
     26         MethodInfo[] methods = m_Target.GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
     27         foreach (MethodInfo m in methods)
     28         {
     29             //.net 2.0
     30             //Subscribe[] subs = (Subscribe[])m.GetCustomAttributes(typeof(Subscribe), true);
     31             //if(subs != null && subs.Length>0)
     32             //    Add(subs[0].GetSubscription(),  Delegate.CreateDelegate(typeof(Action<Notification>), m_Target,m.Name) as Action<Notification>);         
     33             
     34             Subscribe sub = m.GetCustomAttribute<Subscribe>();
     35             if (sub != null)
     36                 Add(sub.GetSubscription(), m.CreateDelegate(typeof(Action<Notification>), m_Target) as Action<Notification>);               
     37         }
     38     }
     39 
     40     public void Awake() { m_LifeState = 1; }
     41     public void Sleep() { m_LifeState = 0; }
     42     void _Execute(Enum type,Notification note)
     43     {
     44         if (m_LifeState == 0) return;
     45         if (m_DictAction.ContainsKey(type))
     46         {          
     47             if (m_DictAction[type] != null)
     48                 m_DictAction[type](note);
     49         }
     50     }
     51 
     52     public void Add(Enum type,Action<Notification> receiver)
     53     {
     54         if (receiver == null)
     55             throw new Exception("Receiver is null");
     56         if (m_DictAction.ContainsKey(type))
     57             throw new Exception(string.Format("{0} has added",type.ToString()));
     58         m_DictAction[type] = receiver;
     59         _Add(type, this);
     60     }
     61 
     62     public void Remove(Enum type)
     63     {
     64         m_DictAction.Remove(type);
     65         _Remove(type, this);
     66     }
     67     public void RemoveAll()
     68     {
     69         ICollection keys = m_DictAction.Keys;
     70         Enum[] arrTemp = new Enum[keys.Count];
     71         keys.CopyTo(arrTemp, 0);
     72         foreach (Enum type in arrTemp)
     73             Remove(type);
     74     }
     75 
     76     public void Send(Enum type , params Object[] datas)
     77     {
     78         Notification note = new Notification();
     79         note.Type = type;
     80         note.Params = datas;
     81         note.Target = m_Target;
     82         _Send(type, note);
     83     }
     84 
     85     
     86     public void Destory()
     87     {
     88         RemoveAll();
     89         m_DictAction = null;
     90         m_Target = null;
     91     }
     92 
     93     #region static functions
     94     static readonly Dictionary<Enum, List<Notifier>> s_DictNotifiers = new Dictionary<Enum, List<Notifier>>();
     95     static void _Add(Enum type,Notifier notifier)
     96     {
     97         if (!s_DictNotifiers.ContainsKey(type))
     98             s_DictNotifiers[type] = new List<Notifier>();
     99         if (!s_DictNotifiers[type].Contains(notifier))
    100             s_DictNotifiers[type].Add(notifier);
    101     }
    102 
    103     static void _Remove(Enum type,Notifier notifier)
    104     {
    105         if (s_DictNotifiers.ContainsKey(type))
    106         {
    107             if (s_DictNotifiers[type].Contains(notifier))
    108                 s_DictNotifiers[type].Remove(notifier);
    109         }
    110     }
    111 
    112     static void _Send(Enum type, Notification note)
    113     {
    114         if (s_DictNotifiers.ContainsKey(type))
    115         {
    116             List<Notifier> notifiers = s_DictNotifiers[type];
    117             int count = notifiers.Count;
    118             for (int i = count - 1; i > -1; --i)
    119             {
    120                 if (notifiers[i] != null)
    121                     notifiers[i]._Execute(type,note);
    122             }
    123         }
    124     }
    125     #endregion
    126 }

    主程序:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace NotificationProj
     8 {
     9     class Program:Notifier
    10     {
    11         public enum NotifierSendType1
    12         {
    13             E,
    14         }
    15         static void Main(string[] args)
    16         {
    17             new Program().init();
    18         }
    19 
    20         Notifier n1;
    21 
    22         private void init()
    23         {
    24             n1 = new Notifier();
    25             n1.Send(NotifierSendType1.E);
    26             Console.ReadKey();
    27             
    28         }
    29         [Subscribe(NotifierSendType1.E)]
    30         void OnReceive1E(Notification note)
    31         {
    32             Console.WriteLine("RRR");//RRR
    33         }
    34     }
    35 }

     

    转载于:https://www.cnblogs.com/monkeycoder/p/6860132.html

    展开全文
  • Apple应用消息通知 swift前端c#后端
    1. 使用keychain access->Certificate Assistent申请一个证书



    2. 登录apple developer网站,申请一个push notification证书

    一直到最后一步,会看到证书:





    3. 下载并安装证书


    4. 配置development provision file的app id






    5. 配置xcode的build,选择配置好的development provision文件



    6. 导出安装的证书(第3步下载的),在server端使用。





    swift  代码:

    class AppDelegate {
    
    
    ...
    
    
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            
            let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
                // Enable or disable features based on authorization.
            }
        
            
            application.registerForRemoteNotifications()
            
            return true
        }
        
        func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
            
            let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
            print(deviceTokenString)
        }
    
    
    
    
    ...
    







    C# 代码:

    ...
    var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox,
                    "push-cert.p12", "Hello-12345");
    
    
                // Create a new broker
                var apnsBroker = new ApnsServiceBroker(config);
    
    
                // Wire up events
                apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
                {
                    aggregateEx.Handle(ex =>
                    {
                        // See what kind of exception it was to further diagnose
                        if (ex is ApnsNotificationException)
                        {
                            var notificationException = (ApnsNotificationException) ex;
    
    
                            // Deal with the failed notification
                            var apnsNotification = notificationException.Notification;
                            var statusCode = notificationException.ErrorStatusCode;
    
    
                            _log.ErrorFormat($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");
                        }
                        else
                        {
                            // Inner exception might hold more useful information like an ApnsConnectionException			
                            _log.ErrorFormat($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
                        }
    
    
                        // Mark it as handled
                        return true;
                    });
                };
    
    
                apnsBroker.OnNotificationSucceeded += (notification) =>
                {
                    _log.InfoFormat("Apple Notification Sent!");
                };
    
    
                // Start the broker
                apnsBroker.Start();
    
    
    
    
                // Queue a notification to send
                apnsBroker.QueueNotification(new ApnsNotification
                {
                    DeviceToken = "58AA314A317D72AE83413F9C9FA6201D2573FAE472A40D72D0E528E7D0F51DED",
                    Payload = JObject.Parse("{" +
                                            "\"aps\":{\"alert\":\"Hello PushSharp!\"}" +
                                            
                                            "}")
                });
    
    
    
    
                // Stop the broker, wait for it to finish   
                // This isn't done after every message, but after you're
                // done with the broker
                apnsBroker.Stop();
    
    
    ...


    展开全文
  • c#消息提示 类似qq消息提示,msn上线通知c#消息提示 类似qq消息提示,msn上线通知c#消息提示 类似qq消息提示,msn上线通知
  • C# 使用SignalR实现消息通知

    千次阅读 2019-11-08 10:22:58
    背景:Web端需要能实时接收到消息推送,当客户有新消息来时,在客户端的右下角进行弹框提醒。 什么是signalR? Asp.net SignalR是微软为实现实时通信的一个类库。一般情况下,signalR会使用JavaScript的长轮询...

    背景:Web端需要能实时接收到消息推送,当客户有新消息来时,在客户端的右下角进行弹框提醒。

    什么是signalR?

    Asp.net SignalR是微软为实现实时通信的一个类库。一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务器通信,随着Html5中WebSockets出现,SignalR也支持WebSockets通信。另外SignalR开发的程序不仅仅限制于宿主在IIS中,也可以宿主在任何应用程序,包括控制台,客户端程序和Windows服务等,另外还支持Mono,这意味着它可以实现跨平台部署在Linux环境下。

    signalR内部有两类对象:

    Http持久连接(Persisten Connection)对象:用来解决长时间连接的功能。还可以由客户端主动向服务器要求数据,而服务器端不需要实现太多细节,只需要处理PersistentConnection 内所提供的五个事件:OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 即可。
    Hub(集线器)对象:用来解决实时(realtime)信息交换的功能,服务端可以利用URL来注册一个或多个Hub,只要连接到这个Hub,就能与所有的客户端共享发送到服务器上的信息,同时服务端可以调用客户端的脚本。SignalR将整个信息的交换封装起来,客户端和服务器都是使用JSON来沟通的,在服务端声明的所有Hub信息,都会生成JavaScript输出到客户端,.NET则依赖Proxy来生成代理对象,而Proxy的内部则是将JSON转换成对象。

    SignalR将整个信息的交换封装起来,客户端和服务器都是使用JSON来沟通的,在服务端声明的所有Hub信息,都会生成JavaScript输出到客户端,.NET则依赖Proxy来生成代理对象,而Proxy的内部则是将JSON转换成对象。

    客户端和服务端的具体交互情况如下图所示:

    基本流程如图:

    其实说白点SignalR其实就是微软自己封装好的实现即时通讯的一个类库

    如何使用:

    Nuget引入 Microsoft.AspNet.SignalR 系列 2.4.1

    添加完signalR你可以在 Scripts 文件夹下看到自动添加了两个js文件:

    向项目中添加一个signalR集线器(V2)命名为ServerHub:

    在刚刚新建的ServerHub.cs 中写入 一下代码:

    //*********************************************************************************
    //Description:自定义扩展一个消息通知类库模块>集线器
    //Author:DennyHui
    //Create Date: 2019年10月15日18:39:33
    //*********************************************************************************
    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Hubs;
    
    namespace Fisk.DataWithReportManage.AutoTask
    {
        /// <summary>
        /// 消息通知集线器  2019年10月16日12:28:08  Dennyhui
        /// </summary>
        [HubName("serverhub")]
        public class ServerHub:Hub
        {
            /// <summary>
            /// 发送消息 2019年10月16日12:28:18  Dennyhui
            /// </summary>
            /// <param name="message"></param>
            public void SendMsg(string id,string title, string message,string poptype)
            {
                //调用所有客户端的sendMessage方法(sendMessage有2个参数)  
                //Clients.All.SendMessage("测试");
                //Clients.All.broadcastMessage("测试");
                //Clients.All.notify("测试");
                var hubContext = GlobalHost.ConnectionManager.GetHubContext<ServerHub>();//此处的“ServerHub”需要和当前的类名一直
                hubContext.Clients.All.sendMessage(id,title,message, poptype); //用户调用客户端的函数 
                //Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "测试");
            }
            /// <summary>
            /// 实例化  2019年10月16日12:28:31  Dennhui
            /// </summary>
            public void Init() { }
        }
    }

     

    如果你的mvc项目是不进行身份验证的那种吧,必须得添加一个Startup 类.      如果没有这个类,请添加,不然的话项目运行不起来的,具体代码如下:

    using Microsoft.Owin;
    using Owin;
    [assembly: OwinStartup(typeof(SignalRQuickStart.Startup))]
    
    namespace SignalRQuickStart
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
                // 配置集线器
                app.MapSignalR();
            }
        }
    }
    

    在Control 里新建一个MessageAction方法,在Message视图里添加代码如下:

     

    @{
        ViewBag.title = "SignaIR聊天窗口";
    }
        <div class="container">
            <input type="text" id="message" />
            <input type="button" id="sendmessage" value="Send" />
            <input type="hidden" id="displayname" />
            <ul id="messageBox"></ul>
        </div>
    @section scripts
    {
       <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
       <script src="~/signalr/hubs"></script>
        <script>
            $(function () {
                //引用自动生成的集线器代理
                var chat = $.connection.serverHub;
                 //定义服务器调用的客户端sendMessage来显示新消息
                chat.client.sendMessage = function (name, message)
                {
                    //向页面添加消息
                    $("#messageBox").append('<li><strong style="color:green">'+htmlEncode(name)+'</strong>:'+htmlEncode(message)+'</li>');
                }
                //设置焦点到输入框
                $('#message').focus();
                //开始连接服务器
                $.connection.hub.start().done(function () {
                    $('#sendmessage').click(function () {
                        //调用服务器端集线器的Send方法
                        chat.server.sendMsg($('#message').val());
                        //清空输入框信息并获取焦点
                        $("#message").val('').focus();
                    })
                })
            });
            //为显示的消息进行html编码
            function htmlEncode(value)
            {
                var encodeValue = $('<div/>').text(value).html();
                return encodeValue;
            }
        </script>
    }

     

             //消息通知  2019年10月15日18:38:56  Dennyhui
            function  SignalRMessage () {
                //toastr.info("向页面添加消息  ", "新消息");
                var NowDateNoticeList = window.WebNotificationList;
                //引用自动生成的集线器代理  
                var chat = $.connection.serverhub;
                //定义服务器调用的客户端sendMessage来显示新消息  
                //此处的“sendMessage”需要和后台发送消息的方法名一致
                chat.client.sendMessage = function (id, title, message, poptype) {
                    
                    // do somethings
                   
                }
                //集线器开始工作
                $.connection.hub.start().done(function () {
                    chat.server.init();
                });

    好了,一个signalR简单的入门的例子就ok了.

    在任何一个web 页面中发送的消息所有的 页面都会接收到该消息。这种应用在IM系统非常广泛常见。

    当然signalR并不局限于这种B/S模式的消息推送,在C/S 同样也能应用,目前我们公司xamarin android所用的就是这个signalR实现的PC之间、PC与移动端、移动端与移动端之间的交流,使用之后会发现的确挺方便的。

    有人可能感觉很郁闷了,在视图中引入 这段js有什么作用?也并有写啊。

    注意!,这是虚拟目录,也就是你在OWIN Startup中注册的地址

    <script src="~/signalr/hubs"></script>

    这个路径你在项目里面是找不到的!

    其实在服务器端声明的所有Hub信息,最终都会生成JavaScript输出到客户端,其实谷歌浏览器中F12 ,在Sources你就可以看到写的源代码了:

    来看一下在这种B/S 模式中 signalR是如何运行的吧。首先程序开始的时候,Web页面就已经与signalR的服务建立连接。

    $.connection.hub.start() 意思就是有signalR服务建立连接

    .done 函数表示连接成功后为发送的按钮绑定一个单击事件

    发送消息的方法:chat.server.sendMsg($('#message').val())

    在ServerHub重写一个 OnConnected 方法来监控客户端的连接情况,的确程序运行的时候web页面就已经开始建立连接了,在调试的时候可以在输入中看到 "客户端连接成功!

    一个简单的如何使用signalR就是这么多,用法很广泛,当然还可以进行扩展。

    可以使用Quartz这个组件和Signalr搭配进行定时调度发送消息

    有兴趣的朋友可以去看下如何使用Quartz来进行定时调度。

    后面我也会更新一篇关于如何使用Quartz进行定时调度Job的文章。

    展开全文
  • 摘要:C#源码,菜单窗体,任务栏,通知窗口 C#在任务栏显示消息通知窗口,像QQ收到消息的闪动图标一样,本程序仅是演示了闪动的通知窗口,并不具备进一步的功能,程序源代码开源、简单,适合学习C#的网友参考。
  • 每当有个Create 事件,要通知相关的人员。 1.扫码登录企业微信,到企业应用。 2.获取微信配置信息。 Secret和AgentId。 3.管理通讯录,配置接收消息的人群。可以按照部门,标签。获取部门和标签ID, 非常...

    每当有个Create 事件,要通知相关的人员。

    1.扫码登录企业微信,到企业应用。

    2.获取微信配置信息。

    Secret和AgentId。

    3.管理通讯录,配置接收消息的人群。可以按照部门,标签。获取部门和标签ID, 非常重要。

                        

     配置config。根据api,发送相关请求获取token。

    <add key="GetTokenBaseUrl" value="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&amp;corpsecret={1}" />
    <add key="SendMessageBaseUrl" value="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}" />

     

    组织消息结构,消息类型为 news(微信供选择),

    to的对象就是要发送的对象。

     

    发送:

    根据messageResponse 可以信息类型,成功失败等状态码

     这样每当触发时,就可以收到微信通知了:

     

    谢谢阅读。

     

    转载于:https://www.cnblogs.com/shy-huang/p/7069828.html

    展开全文
  • 读后有收获可以支付宝请作者喝咖啡: 3、发送消息代码实现 /// /// 企业消息 /// public class EnterpriseMessage { /// /// 企业id /// private string corpid = ConfigurationManager.AppSettings["DD_corpid"];...
  • C#消息

    2011-04-25 09:19:00
    1什么是消息(Message) 消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命名空间中微软采用面对对象的方式重新定义了Message。新的消息(Message)结构的公共部分属性基本与早期的一样...
  • 代码实现了通过RXT的SeverSDk发送通知消息的功能。
  • Iphone 消息通知(APNS)的3种方式 -- C# 和 nodejs
  • using System.Collections;.../// 消息传递 /// </summary> public class EventDispatcher { public delegate void EventHandler(params object[] objs); private Dictionary<EventEnum
  • 这两天一直在写一个驾校约车的辅助软件,参考了下ByPass的通知,然后昨天晚上写了个发送QQ消息通知 开始在想的是将QQ HOOK后达到我的目的,后来想到一个更简单的。 想法 我们这打开QQ或者Tim消息的时候,当点击它...
  • 深入浅出C#消息

    2021-05-21 14:10:06
    深入浅出C#消息 深入浅出C#消息 本文来自于《电脑编程技巧与维护》2002年7期。 一、消息概述 Windows下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何...
  • C#消息机制

    2010-01-14 10:14:00
    C#消息机制 一、消息概述 Windows下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。 1 什么是消息(Message) 消息就是通知和...
  • C# 消息处理机制

    2013-09-09 18:19:55
    C# 消息处理机制及自定义过滤方式 一、消息概述 Windows 下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。 1. 什么是消息...
  • 钉钉消息机器人.Net通用C#Unity实现钉钉消息通知一个工具类(无需SDK,无其他引用) Chinar —— 心分享、心创新! 助力快速完成 .Net 通用的钉钉Post机器人消息通知 为初学者节省宝贵的时间,避免采坑! 官方文档详细...
  • C#消息原理

    2013-04-24 15:22:19
    一、消息概述  Windows下应用程序的执行是通过消息... 消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命名空间中微软采用面对对象的方式重新定义了Message。新的消息(Message)结构的公共部分属性
  • c# 消息机制

    2011-08-06 18:34:16
    一、消息概述  Windows下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。... 消息就是通知和命令。在.NET框架类库中的Syste
  • 深入浅出C#消息

    2009-01-13 16:29:00
    深入浅出C#消息 深入浅出C#消息 深入浅出C#消息 本文来自于《电脑编程技巧与维护》2002年7期。 一、消息概述 Windows下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的...
  • 今天给大家iOS和Android开发者推荐一个可以给实现给包括iOS、Android和Windows Phone及Blackberry多种操作系统的App应用推送消息通知的开源C#库 - PushSharp,同时PushSharp这个C#库可以兼容Mono框架。 PushSharp...
  • C#消息处理机制

    千次阅读 2012-01-18 15:33:10
    一、消息概述 Windows下应用程序的执行是通过...消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命名空间中微软采用面对对象的方式重新定义了Message。新的消息(Message)结构的公共部分属性基本与早

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 461
精华内容 184
关键字:

c#消息通知

c# 订阅