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()); } }
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(); }
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()); } }
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()); } }
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); } } }
/// <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); } } } }
/// <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; }
public void SendCommand(TcpService.TcpServer TS) { //throw new NotImplementedException(); }
/// <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) // { // } //} }
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()); } } } }
public void PacketArrived(TcpService.TcpServer TS) { }
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(); }
/// <summary> /// 发送命令方法含试发三次的业务逻辑 /// </summary> /// <param name="TS">tcp服务</param> public static void SendCommand(TcpServer TS) { Reflection.SendCommand(TS); }
/// <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); }
//各信道启动 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 }