示例#1
0
        private void button1_Click(object sender, EventArgs e)
        {
            // 广播数据,此处其实也可以对指定的客户端进行广播数据,需要知道AppSession对象,通常的做法的建立一个房间号引擎,
            // 缓存登录到该房间号的AppSession对象,这样就可以实现针对这个房间号的客户端进行广播数据了。


            // Broadcast data, in fact, broadcast data can also be specified for the specified client, you need to know the AppSession object,
            // the usual practice to create a room number engine, cache the AppSession object logged in to the room number,
            // so that you can achieve this room number The client broadcasts data.


            // 数据发送
            NetHandle handle = new NetHandle( );

            if (textBox5.Text.IndexOf('.') >= 0)
            {
                string[] values = textBox5.Text.Split('.');
                handle = new NetHandle(byte.Parse(values[0]), byte.Parse(values[1]), ushort.Parse(values[2]));
            }
            else
            {
                handle = int.Parse(textBox5.Text);
            }


            complexServer.SendAllClients(handle, textBox4.Text);
        }
示例#2
0
        private void ThreadBackgroundReadPlc( )
        {
            // 此处假设我们读取的是西门子PLC的数据,其实三菱的数据读取原理是一样的,可以仿照西门子的开发

            /**************************************************************************************************
            *
            *    假设一:M100,M101存储了一个温度值,举例,100.5℃数据为1005
            *    假设二:M102存储了设备启停信号,0为停止,1为启动
            *    假设三:M103-M106存储了一个产量值,举例:12345678
            *
            **************************************************************************************************/


            while (true)
            {
                if (isReadingPlc)
                {
                    // 这里仅仅演示了西门子的数据读取
                    // 事实上你也可以改成三菱的,无非解析数据的方式不一致而已,其他数据推送代码都是一样的


                    HslCommunication.OperateResult <byte[]> read = siemensTcpNet.ReadFromPLC("M100", 7);

                    if (read.IsSuccess)
                    {
                        failed = 0;                                              // 读取失败次数清空
                        netComplex.SendAllClients(1, read.Content);              // 群发所有客户端
                        ShowReadContent(read.Content);                           // 在主界面进行显示,此处仅仅是测试,实际项目中不建议在服务端显示数据信息
                    }
                    else
                    {
                        failed++;
                        ShowFailedMessage(failed);                               // 显示出来读取失败的情况
                    }
                }

                System.Threading.Thread.Sleep(500);                              // 两次读取的时间间隔
            }
        }
示例#3
0
        private void ComplexServer_AcceptString(AsyncStateOne object1, NetHandle object2, string object3)
        {
            // 我们规定
            // 1 是系统消息,
            // 2 是用户发送的消息
            // 3 客户端在线信息
            // 4 强制客户端下线
            // 当你的消息头种类很多以后,可以在一个统一的类中心进行规定
            if (object2 == 2)
            {
                // 来自客户端的消息,就只有这么一种情况
                NetMessage msg = new NetMessage()
                {
                    FromName = object1.LoginAlias,
                    Time     = DateTime.Now,
                    Type     = "string",
                    Content  = object3,
                };

                // 群发出去
                complexServer.SendAllClients(2, JObject.FromObject(msg).ToString());
            }
        }