using System;
using System.Windows.Forms;
using BinaryProtocol.Core.Handles;
using BinaryProtocol.Core.Models;
using BinaryProtocol.Core.Tcp;
using BinaryProtocol.Models.Constants;
using BinaryProtocol.Models.Events;
using BinaryProtocol.Server.Handles;
using ProtocolType = BinaryProtocol.Models.Constants.ProtocolType;
namespace BinaryProtocol.Server
{
public partial class FormServer : Form
{
private MessageServer _tcpServer;
public FormServer()
{
InitializeComponent();
MessageDispatcher.RegisterMessageHandleMapper(
new MessageHandleMapper(
(byte)ProtocolType.Protocol001,
(byte)Protocol001MessageType.TemperatureEvent,
typeof(TemperatureEventHandle)));
MessageDispatcher.RegisterMessageHandleMapper(
new MessageHandleMapper(
(byte)ProtocolType.Protocol002,
(byte)Protocol001MessageType.TemperatureEvent,
typeof(TemperatureEventHandle2)));
_tcpServer = new MessageServer("127.0.0.1", 51888, AddItemToListBox);
}
private void buttonStart_Click(object sender, EventArgs e)
{
_tcpServer.Start();
}
private void buttonStop_Click(object sender, EventArgs e)
{
_tcpServer.Stop();
}
private delegate void AddItemToListBoxDelegate(string str);
/// <summary>在ListBox中追加状态信息
///
/// </summary>
/// <param name="str">要追加的信息</param>
private void AddItemToListBox(string str)
{
if (listBoxStatus.InvokeRequired)
{
AddItemToListBoxDelegate d = AddItemToListBox;
listBoxStatus.Invoke(d, str);
}
else
{
listBoxStatus.Items.Add(str);
listBoxStatus.SelectedIndex = listBoxStatus.Items.Count - 1;
listBoxStatus.ClearSelected();
}
}
private async void BtnSendToDev1_Click(object sender, EventArgs e)
{
//创建事件
TemperatureEvent e1 = new TemperatureEvent
{
DeviceId = "Dev00001",
Temperature = 23,
Time = DateTime.Now,
Note = "备注",
Field5 = 5,
Field6 = 6,
Field7 = 7.4321f,
Field8 = 8.12345d,
Field11 = '/',
Field12 = 15665565,
Field13 = 127,
Field14 = 4294967295,
Field15 = 18446744073709551615,
Field16 = 65535
};
//编码
var messageBody1 = new MessageBody<TemperatureEvent>(e1);
var messageHead1 = new MessageHead(
2,
(byte)ProtocolType.Protocol001,
(byte)Protocol001MessageType.TemperatureEvent,
3,
messageBody1.Bytes.Length);
var message1 = new Message<TemperatureEvent>(messageHead1, messageBody1);
await _tcpServer.SendAsync("00001", message1);
}
private async void BtnSendToDev2_Click(object sender, EventArgs e)
{
//创建事件
TemperatureEvent e2 = new TemperatureEvent
{
DeviceId = "Dev00002",
Temperature = 29,
Time = DateTime.Now,
Note = "备注2",
Field5 = 4,
Field6 = 3,
Field7 = 5.89221f,
Field8 = 6.1885d,
Field11 = '`',
Field12 = 46335,
Field13 = 89,
Field14 = 4332468,
Field15 = 1789654853,
Field16 = 32456
};
//编码
var messageBody2 = new MessageBody<TemperatureEvent>(e2);
var messageHead2 = new MessageHead(
3,
(byte)ProtocolType.Protocol002,
(byte)Protocol001MessageType.TemperatureEvent,
5,
messageBody2.Bytes.Length);
var message2 = new Message<TemperatureEvent>(messageHead2, messageBody2);
await _tcpServer.SendAsync("00002", message2);
}
}
}
namespace BinaryProtocol.Server
{
partial class FormServer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.listBoxStatus = new System.Windows.Forms.ListBox();
this.buttonStop = new System.Windows.Forms.Button();
this.buttonStart = new System.Windows.Forms.Button();
this.BtnSendToDev1 = new System.Windows.Forms.Button();
this.BtnSendToDev2 = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.listBoxStatus);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(735, 167);
this.groupBox1.TabIndex = 9;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "状态信息";
//
// listBoxStatus
//
this.listBoxStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.listBoxStatus.FormattingEnabled = true;
this.listBoxStatus.ItemHeight = 12;
this.listBoxStatus.Location = new System.Drawing.Point(19, 20);
this.listBoxStatus.Name = "listBoxStatus";
this.listBoxStatus.Size = new System.Drawing.Size(701, 136);
this.listBoxStatus.TabIndex = 0;
//
// buttonStop
//
this.buttonStop.Location = new System.Drawing.Point(125, 197);
this.buttonStop.Name = "buttonStop";
this.buttonStop.Size = new System.Drawing.Size(75, 23);
this.buttonStop.TabIndex = 8;
this.buttonStop.Text = "停止监听";
this.buttonStop.UseVisualStyleBackColor = true;
this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click);
//
// buttonStart
//
this.buttonStart.Location = new System.Drawing.Point(31, 197);
this.buttonStart.Name = "buttonStart";
this.buttonStart.Size = new System.Drawing.Size(75, 23);
this.buttonStart.TabIndex = 7;
this.buttonStart.Text = "开始监听";
this.buttonStart.UseVisualStyleBackColor = true;
this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click);
//
// BtnSendToDev1
//
this.BtnSendToDev1.Location = new System.Drawing.Point(291, 197);
this.BtnSendToDev1.Name = "BtnSendToDev1";
this.BtnSendToDev1.Size = new System.Drawing.Size(94, 23);
this.BtnSendToDev1.TabIndex = 10;
this.BtnSendToDev1.Text = "给设备1发信息";
this.BtnSendToDev1.UseVisualStyleBackColor = true;
this.BtnSendToDev1.Click += new System.EventHandler(this.BtnSendToDev1_Click);
//
// BtnSendToDev2
//
this.BtnSendToDev2.Location = new System.Drawing.Point(417, 197);
this.BtnSendToDev2.Name = "BtnSendToDev2";
this.BtnSendToDev2.Size = new System.Drawing.Size(98, 23);
this.BtnSendToDev2.TabIndex = 11;
this.BtnSendToDev2.Text = "给设备2发信息";
this.BtnSendToDev2.UseVisualStyleBackColor = true;
this.BtnSendToDev2.Click += new System.EventHandler(this.BtnSendToDev2_Click);
//
// FormServer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(760, 239);
this.Controls.Add(this.BtnSendToDev2);
this.Controls.Add(this.BtnSendToDev1);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.buttonStop);
this.Controls.Add(this.buttonStart);
this.Name = "FormServer";
this.Text = "异步TCP聊天服务器端";
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.ListBox listBoxStatus;
private System.Windows.Forms.Button buttonStop;
private System.Windows.Forms.Button buttonStart;
private System.Windows.Forms.Button BtnSendToDev1;
private System.Windows.Forms.Button BtnSendToDev2;
}
}
using System.Threading.Tasks;
using BinaryProtocol.Core.Handles;
using BinaryProtocol.Core.Tcp;
using BinaryProtocol.Models.Events;
namespace BinaryProtocol.Server.Handles
{
/// <summary>
/// 事件处理器
/// </summary>
public class TemperatureEventHandle : MessageHandle<TemperatureEvent>
{
public override async Task ConsumeAsync(ConnectContext connectContext)
{
await Task.Run(() =>
{
connectContext.LogAction($"收到消息:{Newtonsoft.Json.JsonConvert.SerializeObject(MessageBody.Value)}");
});
}
}
}
using System.Threading.Tasks;
using BinaryProtocol.Core.Handles;
using BinaryProtocol.Core.Tcp;
using BinaryProtocol.Models.Events;
namespace BinaryProtocol.Server.Handles
{
/// <summary>
/// 事件处理器
/// </summary>
public class TemperatureEventHandle2 : MessageHandle<TemperatureEvent>
{
public override async Task ConsumeAsync(ConnectContext connectContext)
{
await Task.Run(() =>
{
connectContext.LogAction($"收到消息:{Newtonsoft.Json.JsonConvert.SerializeObject(MessageBody.Value)}");
});
}
}
}