教学-提升,像调用方法一样通信传输

2018-11-27 14:06 更新

大多数的通信架构只保证里基本数据的传输,在大家编写的过程中还要自己自己编码或解码等内容。然后把数据用一大推的判断来分割起来,保证运行到想要的代码段。那么使用weaving-socket架构的朋友们,你们有福了,现在你只需要定义好方法名称增加一个修饰就可以直接像调用方法类似的手段运行到你只定的方法中。这很简单愉快。

首先把项目下载下来: http://git.oschina.net/dreamsfly900/universal-Data-Communication-System-for-windows

还有一个同胞项目

.NET Core的weaving-socket项目

http://git.oschina.net/dreamsfly900/weaving-socket-core

第一步服务端编写:

新版本更新后MyInterface 变更命名WeaveBase。TCPCommand变更命名,WeaveTCPCommand请务必注意。

首先我们需要新建一个类库项目,注意是类库。起个名字content_manage,然后引用项目 MyInterface。

将你新建的类,继承MyInterface.TCPCommand ,实现MyInterface.TCPCommand中的必须要实现的方法。

public class content_manage : MyInterface.TCPCommand { public override void Bm_errorMessageEvent(Socket soc, _baseModel _0x01, string message) { //错误异常事件,message为错误信息,soc为产生异常的连接 }

public override byte Getcommand() { //此CLASS的实例,代表的指令,指令从0-254,0x9c与0xff为内部指令不能使用。 //0x01的意思是,只要是0x01的指令,都会进入本实例进行处理 return 0x01; }

public override bool Run(string data, Socket soc) { //此事件是接收事件,data 是String类型的数据,soc是发送人。 return true; }

public override void TCPCommand_EventDeleteConnSoc(Socket soc) { //此事件是当有人中断了连接,此事件会被调用 }

public override void TCPCommand_EventUpdataConnSoc(Socket soc) { //此事件是当有人新加入了连接,此事件会被调用 } } 里面有一个 public override bool Run(string data, Socket soc)的接收事件,发送的数据都会经过这里方法。题目说了,要自己可以定义方法的,那要怎么办呢?

比如我想在客户端看到当前有多少人在线。那么我们一般定义一个方法名:getnum。

那么在这里怎么办呢?看代码

[InstallFun("forever")] public void getnum(Socket soc, _baseModel _0x01) { int num = 9987;//假设我人数为9987 SendRoot<int>(soc, 0x01, _0x01.Request, num, 0, _0x01.Token); //发送人数给客户端 //参数1,发送给客户端对象,参数2,发送给客户端对应的方法,参数3,人数的实例,参数4,此处无作用,参数5,客户端此次token } 只需要这样定义就可以了,[InstallFun("forever")] 代表了,此方法永久有效。

当然还有对应的 [InstallFun("once")]代表了,此方法只能被调用一次,立刻销毁。

public void getnum(Socket soc, _baseModel _0x01),方法名可以随意更改,参数和返回值为固定的。

那么我们怎么告诉客户端我们有多少人呢?

SendRoot<int>(soc, 0x01, _0x01.Request, num, 0, _0x01.Token);就是这个方法了。

参数1,发送给客户端对象,参数2,发送给客户端对应的方法,参数3,人数的实例,参数4,此处无作用,参数5,客户端此次token

这样就完成了。完整代码:

public class content_manage : MyInterface.TCPCommand { public override void Bm_errorMessageEvent(Socket soc, _baseModel _0x01, string message) {

         
    }
    [InstallFun("forever")]
    public void getnum(Socket soc, _baseModel _0x01)
    {
        int num = 9987;
        SendRoot<int>(soc, 0x01, _0x01.Request, num, 0, _0x01.Token);
    }
    public override byte Getcommand()
    {
        return 0x01;
    }

public override bool Run(string data, Socket soc) { return true; }

public override void TCPCommand_EventDeleteConnSoc(Socket soc) {

         
    }

public override void TCPCommand_EventUpdataConnSoc(Socket soc) {

         
    }
}

然后对着你的项目右键-》属性-》生成事件-》后期生成事件命令行

填写copy $(TargetFileName) $(SolutionDir)\智信构建结构\bin\Debug\command

然后编译此代码,后会生成content_manage.dll的文件会自动进入

架构中通信服务端运行器项目的 command 目录中,可以先生成一边通信服务端运行器项目,

在Debug目录中看一看有没有command 目录,没有的话,手动建一个。

然后运行 通信服务端运行器项目 ,

选择TCPSOKET,填写好端口号,点击添加监听,然后点击加载服务器插件,就开始运行了。

第二步客户端:

新建一个winform项目,引用MyInterface与TCPclient项目。

在界面上加一个按钮:

public partial class Form1 : Form { public Form1() { InitializeComponent(); } P2Pclient p2pc = new P2Pclient(false);//初始化 private void Form1_Load(object sender, EventArgs e) { p2pc.receiveServerEvent += P2pc_receiveServerEvent;//接收数据事件 p2pc.timeoutevent += P2pc_timeoutevent;//超时(掉线)事件 p2pc.start("127.0.0.1", 8989, false);//11002 是网关的端口号,刚才WEB网关占用了11001,我改成11002了 p2pc.AddListenClass(this);//这是表示 [InstallFun("forever")]的方法,在哪个类中,全部加载出来。

       
    }
    [InstallFun("forever")]//客户端也支持像服务端那样写,刚才看懂返回的内容也是getnum,所以客户端也要把方法命名getnum
    public void getnum(System.Net.Sockets.Socket soc, _baseModel _0x01)//服务端返回内容调用的方法getnum,所以命名为getnum。
    {
        MessageBox.Show(_0x01.GetRoot<int>().ToString());//弹出返回值

      
    }
    private void P2pc_timeoutevent()
    {
        if (!p2pc.Isline)
        {
            p2pc.Restart(true);//断线重连
        }
    }

private void P2pc_receiveServerEvent(byte command, string text) {

       
    }

 
    private void button1_Click(object sender, EventArgs e)
    {
        //在加个发送
        p2pc.Tokan = "随便写一个";
        p2pc.SendRoot<int>(0x01, "getnum", 0,0);//调用服务端方法getnum,是服务端的方法。
        //这样就可以了,我们试试
    }
}

写代码

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号