Example #1
0
        void tcp_OnReceivedData(object sender, TcpService.ReceivedDataEventArgs e)
        {
            try{
                TcpService.TcpServer tcp = sender as TcpService.TcpServer;
                //写入接收数据队列
                TcpService.TcpBussiness.WriteTrdQ(tcp, e.ClientSocket, e.RevData);

                //Console.WriteLine(Encoding.GetEncoding("gb2312").GetString(e.RevData));

                //写入透明传输的数据报列表
                ServiceBussiness.WriteQDM(e.RevData);
                //写入日志
                System.Net.IPEndPoint ipep = (System.Net.IPEndPoint)e.ClientSocket.RemoteEndPoint;
                LogInfoToTxt(ServiceEnum.NFOINDEX.TCP, ipep.Address + ":" + ipep.Port, e.RevData);

                //写入待发送至界面的数据处理列表(透明传输代替)
                //ServiceBussiness.WriteQRDM(tcp.ServiceID, e.RevData);

                //解析数据包
                TcpService.TcpBussiness.ResolvePacket(tcp);
            }
            catch (Exception ex)
            {
                log.Error(DateTime.Now + "接收处理操作异常" + ex.ToString());
            }
        }
Example #2
0
        public void PacketArrived(TcpService.TcpServer TS)
        {
            //dateDiff + "|" + RtuCount + "|" + project + "|" + RegistrationInfo + "|" + PublicIP +"|" +RunState;

            string ServiceId = TS.ServiceID;
            ConcurrentQueue <TcpReceivedData> Qtrd = TS.TQ.Qtrd;
            List <TcpSocket> Ts = TS.Ts;
            ConcurrentQueue <TcpSendData> Qtsd = TS.TQ.Qtsd;


            while (Qtrd.Count > 0)
            {
                TcpReceivedData trd = null;
                Qtrd.TryDequeue(out trd);
                if (trd != null)
                {
                    CENTER_SERVER centerserver = pd.GetServer(trd.Data);
                    if (centerserver != null)
                    {
                        InsertNewSTCD(centerserver.ProjectName + centerserver.PublicIP, Service.ServiceEnum.NFOINDEX.TCP, TS);

                        //判断servers中是否存在,如存在更新信息
                        pd.ExistsServer(servers, centerserver);
                        //判断centerserver.RunState是否为start,如是写入库表CENTER_STARTSTATE
                        pd.ExistsServerStartState(StartState, centerserver);
                        //判断centerserver.RTUCount是否变化,如是写入库表CENTER_RTUCHANGE
                    }


                    //if (state == "H")
                    //{
                    //    InsertNewSTCD(STCD, Service.ServiceEnum.NFOINDEX.TCP, TS);
                    //    bool B = false;
                    //    //更新socket列表的stcd、socket
                    //    TcpBussiness.UpdSocket(TS, trd.SOCKET, STCD, out B);
                    //}
                    //else if (state == "C")
                    //{
                    //    var tcps = from t in Ts where t.STCD == STCD && t.TCPSOCKET != null select t;
                    //    List<TcpService.TcpSocket> Tcps = tcps.ToList<TcpService.TcpSocket>();
                    //    if (Tcps.Count() > 0)
                    //    {
                    //        foreach (var item in Tcps)
                    //        {
                    //            item.TCPSOCKET.Send(Encoding.ASCII.GetBytes(ask));
                    //        }
                    //    }
                    //}
                }
            }

            //throw new NotImplementedException();
        }
Example #3
0
        void tcp_OnConnected(object sender, TcpService.ConnectedEventArgs e)
        {
            try{
                TcpService.TcpServer tcp = sender as TcpService.TcpServer;
                //添加入连接列表
                //TcpService.TcpBussiness.AddSocket(tcp, e.ClientSocket);

                //上线通知
                TcpService.TcpBussiness.TcpConnected(tcp, e.ClientSocket);
            }
            catch (Exception ex)
            {
                log.Error(DateTime.Now + "上线操作异常" + ex.ToString());
            }
        }
Example #4
0
        void tcp_OnDisconnected(object sender, TcpService.DisconnectedEventArgs e)
        {
            try
            {
                TcpService.TcpServer tcp = sender as TcpService.TcpServer;
                //下线通知
                TcpService.TcpBussiness.TcpDisconnected(tcp, e.ClientSocket);

                //从连接列表删除
                TcpService.TcpBussiness.DelSocket(tcp, e.ClientSocket);
            }
            catch (Exception ex)
            {
                log.Error(DateTime.Now + "下线操作异常" + ex.ToString());
            }
        }
Example #5
0
 public void InsertNewSTCD(string STCD, Service.ServiceEnum.NFOINDEX NFOINDEX, object Server)
 {
     if (NFOINDEX == Service.ServiceEnum.NFOINDEX.TCP)
     {
         TcpService.TcpServer        TS = Server as TcpService.TcpServer;
         List <TcpService.TcpSocket> Ts = TS.Ts;
         var tcps = from t in Ts where t.STCD == STCD select t;
         if (tcps.Count() == 0)
         {
             TcpSocket ts = new TcpSocket()
             {
                 STCD = STCD
             };
             Ts.Add(ts);
         }
     }
 }
Example #6
0
        /// <summary>
        /// 掉线通知
        /// </summary>
        /// <param name="TS">tcp服务</param>
        /// <param name="socket">掉线的socket</param>
        public static void TcpDisconnected(TcpServer TS, Socket socket)
        {
            string           ServiceId = TS.ServiceID;
            List <TcpSocket> Ts        = TS.Ts;
            var temp = from t in Ts where t.TCPSOCKET == socket select t;
            List <TcpSocket> Temp = temp.ToList <TcpSocket>();

            if (Temp.Count() > 0)
            {
                if (Temp.First().CONNECTTIME != null)
                {
                    ServiceBussiness.WriteQUIM("TCP", ServiceId, Temp.First().STCD, "下线!", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text);
                    ServiceBussiness.WriteQUIM("", "", "", "stcd|" + Temp.First().STCD + ":tcp:", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.State);
                }
                else
                {
                    if (Temp.First().TCPSOCKET.Connected)
                    {
                        ServiceBussiness.WriteQUIM("TCP", ServiceId, (Temp.First().TCPSOCKET.RemoteEndPoint as System.Net.IPEndPoint).Address.ToString() + ":" + (Temp.First().TCPSOCKET.RemoteEndPoint as System.Net.IPEndPoint).Port, "断开连接!", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text);
                    }
                }
            }
        }
Example #7
0
        /// <summary>
        /// 从列表删除并关闭socket
        /// </summary>
        /// <param name="TS">tcp服务</param>
        /// <param name="Second">秒</param>
        public static void DelClosSocket(TcpServer TS, int Second)
        {
            List <TcpSocket> Ts = TS.Ts;
            var       temp      = from t in Ts where t.CONNECTTIME != null select t;
            ArrayList al        = new ArrayList();

            foreach (TcpSocket item in temp)
            {
                DateTime dt1 = item.DATATIME.Value.AddSeconds(Second);
                DateTime dt2 = DateTime.Now;
                if (DateTime.Compare(dt1, dt2) < 0)
                {
                    al.Add(item);
                }
            }

            foreach (TcpSocket item in al)
            {
                try
                {
                    //if (item.STCD != null || item.STCD  != "")
                    //{
                    TcpDisconnected(TS, item.TCPSOCKET);
                    //}
                    //item.TCPSOCKET.Close();
                    //item.TCPSOCKET.Dispose();
                    item.TCPSOCKET   = null;
                    item.CONNECTTIME = null;
                    item.DATATIME    = null;
                }
                catch (Exception ex)
                {
                    ServiceControl.log.Error(DateTime.Now + ex.ToString());
                }
            }
            al = null;
        }
Example #8
0
 public void SendCommand(TcpService.TcpServer TS)
 {
     //throw new NotImplementedException();
 }
Example #9
0
        /// <summary>
        /// 接收数据时收到未设置测站信息,自动将测站信息入库并在列表中添加
        /// </summary>
        /// <param name="STCD">站号</param>
        /// <param name="NFOINDEX">信道类型</param>
        /// <param name="Server">服务</param>
        public void InsertNewSTCD(string STCD, Service.ServiceEnum.NFOINDEX NFOINDEX, object Server)
        {
            if (STCD.Length == 0)
            {
                return;
            }
            var rtu = from r in Service.ServiceBussiness.RtuList where r.STCD == STCD select r;

            if (rtu.Count() == 0)
            {
                Service.Model.YY_RTU_Basic model = new Service.Model.YY_RTU_Basic();
                model.STCD     = STCD;
                model.PassWord = "******";
                model.NiceName = STCD;
                bool b = PublicBD.db.AddRTU(model);     //添加
                if (b)
                {
                    Service.ServiceBussiness.RtuList.Add(new Service.Model.YY_RTU_Basic()
                    {
                        STCD = STCD, NiceName = STCD, PassWord = "******"
                    });
                }
            }
            if (NFOINDEX == Service.ServiceEnum.NFOINDEX.UDP)
            {
                UdpService.UdpServer        US = Server as UdpService.UdpServer;
                List <UdpService.UdpSocket> Us = US.Us;
                var udps = from u in Us where u.STCD == STCD select u;
                if (udps.Count() == 0)
                {
                    UdpSocket us = new UdpSocket()
                    {
                        STCD = STCD
                    };
                    Us.Add(us);
                }
            }
            else if (NFOINDEX == Service.ServiceEnum.NFOINDEX.TCP)
            {
                TcpService.TcpServer        TS = Server as TcpService.TcpServer;
                List <TcpService.TcpSocket> Ts = TS.Ts;
                var tcps = from t in Ts where t.STCD == STCD select t;
                if (tcps.Count() == 0)
                {
                    TcpSocket ts = new TcpSocket()
                    {
                        STCD = STCD
                    };
                    Ts.Add(ts);
                }
            }
            else if (NFOINDEX == Service.ServiceEnum.NFOINDEX.GSM)
            {
                if (STCD != null || STCD != "")
                {
                    GsmService.GsmServer        GS = Server as GsmService.GsmServer;
                    List <GsmService.GsmMobile> Gs = GS.Gs;
                    var gsms = from g in Gs where g.STCD == STCD select g;
                    if (gsms.Count() == 0)
                    {
                        GsmMobile gs = new GsmMobile()
                        {
                            STCD = STCD
                        };
                        Gs.Add(gs);
                    }
                }
            }
            //else if (NFOINDEX == Service.ServiceEnum.NFOINDEX.COM)
            //{
            //    ComService.ComServer CS = Server as ComService.ComServer;
            //    List<ComService.ComSatellite> Cs = CS.Cs;
            //    var coms = from g in Cs where g.STCD == STCD select g;
            //    if (coms.Count() == 0)
            //    {

            //    }
            //}
        }
Example #10
0
        public void PacketArrived(TcpService.TcpServer TS)
        {
            string ServiceId = TS.ServiceID;
            ConcurrentQueue <TcpReceivedData> Qtrd = TS.TQ.Qtrd;
            List <TcpSocket> Ts = TS.Ts;
            ConcurrentQueue <TcpSendData> Qtsd = TS.TQ.Qtsd;


            while (Qtrd.Count > 0)
            {
                TcpReceivedData trd = null;
                Qtrd.TryDequeue(out trd);
                if (trd != null)
                {
                    try
                    {
                        //注册&透传
                        Service.ServiceBussiness.RemoteCommand(trd.Data);
                        //Service.ServiceBussiness.Registered30(urd.Data);

                        //ASCII To String
                        string        STR  = Encoding.ASCII.GetString(trd.Data);
                        List <string> list = pd.SubPackage(STR);
                        if (list.Count > 0)
                        {
                            bool PkV = true;
                            foreach (var item in list)
                            {
                                PkV = pd.PacketValidate(item);
                                if (PkV)
                                {
                                    string STCD = pd.GetCode(item);
                                    InsertNewSTCD(STCD, Service.ServiceEnum.NFOINDEX.TCP, TS);
                                    bool B = false;
                                    //更新socket列表的stcd、socket
                                    TcpBussiness.UpdSocket(TS, trd.SOCKET, STCD, out B);
                                    if (!B)
                                    {
                                        //上线
                                        TcpBussiness.TcpConnected(TS, STCD);
                                    }
                                    //通知界面
                                    ServiceBussiness.WriteQUIM("TCP", ServiceId, STCD, "接收数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);

                                    PacketArrived(item, ServiceEnum.NFOINDEX.TCP, TS);
                                }
                            }
                        }
                        else
                        {
                            ServiceBussiness.WriteQUIM("TCP", ServiceId, "", "接收异常数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);
                        }
                    }
                    catch (Exception ex)
                    {
                        //通知界面
                        ServiceBussiness.WriteQUIM("TCP", ServiceId, "", "接收异常数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);
                        log.Error(DateTime.Now + "包处理操作异常" + ex.ToString());
                    }
                }
            }
        }
Example #11
0
 public void PacketArrived(TcpService.TcpServer TS)
 {
 }
Example #12
0
        public void PacketArrived(TcpService.TcpServer TS)
        {
            string ServiceId = TS.ServiceID;
            ConcurrentQueue <TcpReceivedData> Qtrd = TS.TQ.Qtrd;
            List <TcpSocket> Ts = TS.Ts;
            ConcurrentQueue <TcpSendData> Qtsd = TS.TQ.Qtsd;


            while (Qtrd.Count > 0)
            {
                TcpReceivedData trd = null;
                Qtrd.TryDequeue(out trd);
                if (trd != null)
                {
                    //Frame[] frames = null;

                    try
                    {
                        //注册&透传
                        Service.ServiceBussiness.RemoteCommand(trd.Data);
                        //Service.ServiceBussiness.Registered30(urd.Data);

                        //ASCII To String
                        string   STR  = Encoding.ASCII.GetString(trd.Data);
                        string[] STRs = STR.Split(new string[] { "##" }, StringSplitOptions.None);
                        if (STRs.Length > 0)
                        {
                            foreach (var item in STRs)
                            {
                                if (item != "")
                                {
                                    string STCD = pd.GetMN(item);
                                    InsertNewSTCD(STCD, Service.ServiceEnum.NFOINDEX.TCP, TS);
                                    bool B = false;
                                    //更新socket列表的stcd、socket
                                    TcpBussiness.UpdSocket(TS, trd.SOCKET, STCD, out B);
                                    if (!B)
                                    {
                                        //上线
                                        TcpBussiness.TcpConnected(TS, STCD);
                                    }
                                    //通知界面
                                    ServiceBussiness.WriteQUIM("TCP", ServiceId, STCD, "接收数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);

                                    PacketArrived(item, ServiceEnum.NFOINDEX.TCP, TS);
                                }
                            }
                        }
                        else
                        {
                            ServiceBussiness.WriteQUIM("TCP", ServiceId, "", "接收异常数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);
                        }
                    }
                    catch (Exception ex)
                    {
                        //通知界面
                        ServiceBussiness.WriteQUIM("TCP", ServiceId, "", "接收异常数据", trd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text);
                        log.Error(DateTime.Now + "包处理操作异常" + ex.ToString());
                    }
                }
            }
            //throw new NotImplementedException();
        }
Example #13
0
 /// <summary>
 /// 发送命令方法含试发三次的业务逻辑
 /// </summary>
 /// <param name="TS">tcp服务</param>
 public static void SendCommand(TcpServer TS)
 {
     Reflection.SendCommand(TS);
 }
Example #14
0
        /// <summary>
        /// 上线通知
        /// </summary>
        /// <param name="TS">tcp服务</param>
        /// <param name="socket">上线的socket</param>
        public static void TcpConnected(TcpServer TS, Socket socket)
        {
            string ServiceId = TS.ServiceID;

            ServiceBussiness.WriteQUIM("TCP", ServiceId, (socket.RemoteEndPoint as System.Net.IPEndPoint).Address.ToString() + ":" + (socket.RemoteEndPoint as System.Net.IPEndPoint).Port, "上线!", new byte[] { }, ServiceBussiness.EnCoderType.HEX, ServiceBussiness.DataType.Text);
        }
Example #15
0
        //各信道启动
        public void ChannelStart()
        {
            var temp = from t in wrx.XMLObj.LsM where t.SERVICETYPE == "TCP" select t;
            List <OperateXML.serviceModel> TEMP = temp.ToList <OperateXML.serviceModel>();

            tcp = new TcpService.TcpServer[TEMP.Count()];
            int k = 0;


            #region 读取命令列表(接收UI召测和GSM发送召测有定时写操作),因此在gsm服务启动前读取
            ServiceControl.LC = ServiceBussiness.GetCommandTempToLC();
            #endregion

            #region 启动服务
            foreach (var item in TEMP)
            {
                try
                {
                    tcp[k] = new TcpService.TcpServer(item.IP_PORTNAME, item.PORT_BAUDRATE, item.SERVICEID);
                    tcp[k].Start();
                    tcp[k].OnConnected    += new EventHandler <TcpService.ConnectedEventArgs>(tcp_OnConnected);
                    tcp[k].OnReceivedData += new EventHandler <TcpService.ReceivedDataEventArgs>(tcp_OnReceivedData);
                    tcp[k].OnDisconnected += new EventHandler <TcpService.DisconnectedEventArgs>(tcp_OnDisconnected);
                    log.Warn("tcp服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动成功!");
                }
                catch (Exception e)
                {
                    log.Warn("tcp服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动失败!", e);
                    //throw e;  //-------避免配置有误,服务死掉
                }
                k++;
            }

            temp = from t in wrx.XMLObj.LsM where t.SERVICETYPE == "UDP" select t;
            TEMP = temp.ToList <OperateXML.serviceModel>();
            udp  = new UdpServer[TEMP.Count()];
            k    = 0;
            foreach (var item in TEMP)
            {
                try
                {
                    udp[k] = new UdpServer(item.IP_PORTNAME, item.PORT_BAUDRATE, item.SERVICEID);
                    udp[k].Start();
                    udp[k].OnReceivedData += new EventHandler <UdpService.ReceivedDataEventArgs>(udp_OnReceivedData);
                    log.Warn(DateTime.Now + "udp服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动成功!");
                }
                catch (Exception e)
                {
                    log.Warn(DateTime.Now + "udp服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动失败!", e);
                    //throw e;  //-------避免配置有误,服务死掉
                }
                k++;
            }
            temp = from t in wrx.XMLObj.LsM where t.SERVICETYPE == "GSM" select t;
            TEMP = temp.ToList <OperateXML.serviceModel>();
            gsm  = new GsmServer[TEMP.Count()];
            k    = 0;
            foreach (var item in TEMP)
            {
                try
                {
                    gsm[k] = new GsmServer(item.IP_PORTNAME, item.PORT_BAUDRATE, item.SERVICEID);
                    gsm[k].Start();
                    Console.WriteLine(DateTime.Now + "启动各组服务命令," + "Restart!");
                    gsm[k].OnReceivedData += new EventHandler <GsmService.ReceivedDataEventArgs>(gsm_OnReceivedData);
                    log.Warn(DateTime.Now + "gsm服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动成功!");
                }
                catch (Exception e)
                {
                    log.Warn(DateTime.Now + "gsm服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动失败!", e);
                    //throw e;  //-------避免配置有误,服务死掉
                }
                k++;
            }

            temp = from t in wrx.XMLObj.LsM where t.SERVICETYPE == "COM" select t;
            TEMP = temp.ToList <OperateXML.serviceModel>();
            com  = new ComServer[TEMP.Count()];
            k    = 0;
            foreach (var item in TEMP)
            {
                try
                {
                    com[k] = new ComServer(item.IP_PORTNAME, item.PORT_BAUDRATE, item.NUM, item.SERVICEID);
                    com[k].Start();
                    com[k].OnReceivedData += new EventHandler <ComService.ReceivedDataEventArgs>(com_OnReceivedData);
                    log.Warn(DateTime.Now + "com服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动成功!");


                    //byte[] bb = EnCoder.HexStrToByteArray("24 5A 4A 58 58 00 15 03 A0 46 01 00 00 02 04 00 04 00 00 00 C7 ".Replace(" ", ""));
                    //com[k].sp.Write(bb, 0, bb.Length);
                }
                catch (Exception e)
                {
                    log.Warn(DateTime.Now + "com服务(" + item.IP_PORTNAME + ":" + item.PORT_BAUDRATE + ")启动失败!", e);
                    //throw e;  //-------避免配置有误,服务死掉
                }
                k++;
            }

            #endregion
        }