apollo实现c#与android消息推送

生也有涯,知也无涯。这篇文章主要讲述apollo实现c#与android消息推送相关的知识,希望能为你提供帮助。
3 实现c#消息推送服务
      c#实现消息推送必须引入M2Mqtt.dll,源码
      a 连接apache apollo代理服务器的代码。需要引入using uPLibrary.Networking.M2Mqtt和 using  uPLibrary.Networking.M2Mqtt.Messages,需要注意的是代码里的client.Connect里的admin和password是之前设置apache apollo时设置的用户名,密码,请自行修改。apollo实现c#与android消息推送(一)

apollo实现c#与android消息推送

文章图片
apollo实现c#与android消息推送

文章图片
//连接apache apollo private void LinkClick(object sender, EventArgs e) { string clientId = ""; string ip = ""; string port = ""; if (String.IsNullOrEmpty(textBoxCT.Text)) { MessageBox.Show("请输入客户机标识!"); return; } if (String.IsNullOrEmpty(textBoxAD.Text) & & textBoxAD.Text.IndexOf(\':\')< =0) { MessageBox.Show("请输入IP地址且带端口号!"); return; } clientId = textBoxCT.Text; ip = textBoxAD.Text.Substring(0,textBoxAD.Text.IndexOf(\':\')); port = textBoxAD.Text.Substring(textBoxAD.Text.IndexOf(\':\')+1); try { client = new MqttClient(IPAddress.Parse(ip), Convert.ToInt32(port), false, null); client.Connect(clientId, "admin", "password", false, 0x01, false, null, null, true, 60); //admin和password是之前在apache apollo中设置的用户名和密码 buttonLink.Enabled = false; buttonLose.Enabled = true; textBoxLS.ForeColor = Color.RoyalBlue; textBoxLS.Text = "已连接"; } catch (Exception ee) { MessageBox.Show("无法连接,请确定代理服务器是否启动,IP端口是否正确"); }}

View Code      b 发布主题代码
apollo实现c#与android消息推送

文章图片
apollo实现c#与android消息推送

文章图片
private void PublishSubmit(object sender, EventArgs e) { string pubTitle = ""; //发布主题 byte pubQu ; //发布质量if (String.IsNullOrEmpty(textBoxPuIt.Text)) { MessageBox.Show("请输入发布主题!"); return; } if (String.IsNullOrEmpty(comboBoxPub.Text)) { MessageBox.Show("请选择发布主题质量!"); return; } pubTitle = textBoxPuIt.Text; if (comboBoxPub.Text=="至多一次") { pubQu = MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE; } else if (comboBoxPub.Text == "至少一次") { pubQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } else { pubQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } try { topic = pubTitle; client.Subscribe(new string[] { pubTitle }, new byte[] { pubQu }); client.Publish(pubTitle, Encoding.UTF8.GetBytes(richTextBoxMess.Text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } catch (Exception) { if (client!=null) { client = null; } MessageBox.Show("已断开连接,请重新连接!"); } }

View Code    c   订阅主题代码
apollo实现c#与android消息推送

文章图片
apollo实现c#与android消息推送

文章图片
private void SubClick(object sender, EventArgs e) { string subTitle = ""; //发布主题 byte subQu; //发布质量 if (String.IsNullOrEmpty(textBoxSub.Text)) { MessageBox.Show("请输入订阅主题!"); return; } if (String.IsNullOrEmpty(comboBoxSub.Text)) { MessageBox.Show("请选择订阅主题质量!"); return; } subTitle = textBoxSub.Text; if (comboBoxSub.Text == "至多一次") { subQu = MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE; } else if (comboBoxSub.Text == "至少一次") { subQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } else { subQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } try { buttonRE.Enabled = false; buttonca.Enabled = true; topic = subTitle; client.Subscribe(new string[] { subTitle }, new byte[] { subQu }); client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; } catch (Exception) { if (client != null) { client = null; } MessageBox.Show("已断开连接,请重新连接!"); } }

View Code    d   全部代码
apollo实现c#与android消息推送

文章图片
apollo实现c#与android消息推送

文章图片
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; namespace MqttCsharp { public partial class Form1 : Form { privateMqttClient client; private string topic = ""; private delegate void MessDelegate< T> (T obj); public Form1() { InitializeComponent(); buttonLose.Enabled = false; buttonca.Enabled = false; }//连接apache apollo private void LinkClick(object sender, EventArgs e) { string clientId = ""; string ip = ""; string port = ""; if (String.IsNullOrEmpty(textBoxCT.Text)) { MessageBox.Show("请输入客户机标识!"); return; } if (String.IsNullOrEmpty(textBoxAD.Text) & & textBoxAD.Text.IndexOf(\':\')< =0) { MessageBox.Show("请输入IP地址且带端口号!"); return; } clientId = textBoxCT.Text; ip = textBoxAD.Text.Substring(0,textBoxAD.Text.IndexOf(\':\')); port = textBoxAD.Text.Substring(textBoxAD.Text.IndexOf(\':\')+1); try { client = new MqttClient(IPAddress.Parse(ip), Convert.ToInt32(port), false, null); client.Connect(clientId, "admin", "password", false, 0x01, false, null, null, true, 60); //admin和password是之前在apache apollo中设置的用户名和密码 buttonLink.Enabled = false; buttonLose.Enabled = true; textBoxLS.ForeColor = Color.RoyalBlue; textBoxLS.Text = "已连接"; } catch (Exception ee) { MessageBox.Show("无法连接,请确定代理服务器是否启动,IP端口是否正确"); }} //断开apache apollo连接 private void CloseLink(object sender, EventArgs e) { if (client !=null & & client.IsConnected) { client.Disconnect(); client = null; buttonLink.Enabled = true; buttonLose.Enabled = false; textBoxLS.ForeColor = Color.Firebrick; textBoxLS.Text = "断开连接"; }} //发布按钮的点击事件 private void PublishSubmit(object sender, EventArgs e) { string pubTitle = ""; //发布主题 byte pubQu ; //发布质量if (String.IsNullOrEmpty(textBoxPuIt.Text)) { MessageBox.Show("请输入发布主题!"); return; } if (String.IsNullOrEmpty(comboBoxPub.Text)) { MessageBox.Show("请选择发布主题质量!"); return; } pubTitle = textBoxPuIt.Text; if (comboBoxPub.Text=="至多一次") { pubQu = MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE; } else if (comboBoxPub.Text == "至少一次") { pubQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } else { pubQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } try { topic = pubTitle; client.Subscribe(new string[] { pubTitle }, new byte[] { pubQu }); client.Publish(pubTitle, Encoding.UTF8.GetBytes(richTextBoxMess.Text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } catch (Exception) { if (client!=null) { client = null; } MessageBox.Show("已断开连接,请重新连接!"); } } //订阅按钮 private void SubClick(object sender, EventArgs e) { string subTitle = ""; //发布主题 byte subQu; //发布质量 if (String.IsNullOrEmpty(textBoxSub.Text)) { MessageBox.Show("请输入订阅主题!"); return; } if (String.IsNullOrEmpty(comboBoxSub.Text)) { MessageBox.Show("请选择订阅主题质量!"); return; } subTitle = textBoxSub.Text; if (comboBoxSub.Text == "至多一次") { subQu = MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE; } else if (comboBoxSub.Text == "至少一次") { subQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } else { subQu = MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE; } try { buttonRE.Enabled = false; buttonca.Enabled = true; topic = subTitle; client.Subscribe(new string[] { subTitle }, new byte[] { subQu }); client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; } catch (Exception) { if (client != null) { client = null; } MessageBox.Show("已断开连接,请重新连接!"); } } void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { //处理接收到的消息 string msg = Encoding.UTF8.GetString(e.Message); ShowMess(msg); } //列表显示 private void ShowMess(string msg) { if (InvokeRequired) { BeginInvoke(new MessDelegate< string> (ShowMess), msg); } else { ListViewItem item = new ListViewItem(new string[] { topic,msg,DateTime.Now.ToString() }); listViewMess.Items.Insert(0, item); }}private void CancelSubClick(object sender, EventArgs e) { try { if (client.IsConnected) { client.Unsubscribe(new string[] { topic }); } buttonRE.Enabled = true; buttonca.Enabled = false; } catch (Exception) { if (client != null) { client = null; } MessageBox.Show("已断开连接,请重新连接!"); } } } }

View Code【apollo实现c#与android消息推送】 

    推荐阅读