对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于mono这些年来的不停发展.下面介绍通过EC这个组件如何通过短短十来分钟的时候内就能实现一个聊天室通讯服务程序.
在实现一个网络通讯程序的时候需要定义一个通讯协议,但EC已经集成了基础的协议功能,只需要根据交互的数据定义消息类型即可(EC提供两种序列化对象描述分别是protobuf和msgpack).
消息定义
针对简单的聊到室只需要定义登进,登出和发言这几个消息如下:
[MessageID(0x0001)] [ProtoContract] public class Login { [ProtoMember(1)] public string Name { get; set; } [ProtoMember(2)] public string From { get; set; } } [MessageID(0x0003)] [ProtoContract] public class Signout { [ProtoMember(1)] public string Name { get; set; } [ProtoMember(2)] public string From { get; set; } } [MessageID(0x0002)] [ProtoContract] public class Say { [ProtoMember(1)] public string Content { get; set; } [ProtoMember(3)] public string From { get; set; } [ProtoMember(2)] public string Name { get; set; } } |
服务端
消息定义完成那用EC来制定一个聊天转发的服务端来说则是件非常简单的事情,只需要十来行代码就可以构建聊天和服务启动等相关功能.
[EC.Controller] public class Program { static void Main(string[] args) { EC.ECServer.Open(); System.Threading.Thread.Sleep(-1); } public void OnLogin(EC.ISession session, Chat.Login e) { session.Channel.Name = e.Name; e.From = session.Channel.EndPoint.ToString(); foreach (Beetle.Express.IChannel other in session.Application.Server.GetOnlines()) { if (other != session.Channel) session.Application.Server.Send(e, other); } } public void OnSay(EC.ISession session, Chat.Say e) { e.Name = session.Channel.Name; e.From = session.Channel.EndPoint.ToString(); foreach (Beetle.Express.IChannel other in session.Application.Server.GetOnlines()) { if (other != session.Channel) session.Application.Server.Send(e, other); } } } |