億陽基站退服專題監(jiān)控軟件v20代碼_第1頁
億陽基站退服專題監(jiān)控軟件v20代碼_第2頁
億陽基站退服專題監(jiān)控軟件v20代碼_第3頁
億陽基站退服專題監(jiān)控軟件v20代碼_第4頁
億陽基站退服專題監(jiān)控軟件v20代碼_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、億陽退服專題軟件V2.0 源代碼61-1using System;using System.Collections; using System.Data;using System.Data.OleDb; using System.Data.Odbc; using System.ServiceProcess; using System.Threading; using System.Data.OleDb; using System.Net;using System.Net.Sockets; using System.Text;using System.Xml; using System.IO;u

2、sing AlarmBoardService.faultService;using AlarmBoardService.SendSMS;namespace AlarmBoardServicepublic enum ServiceHandleStatusStarting = 0,Running = 1,Stopping = 2/ 啟動中/ 正常運行中/ 停止中public partial class Service : ServiceBase#region 字段ArrayList listMsg = new ArrayList(); ArrayList listMsgExc = new Arra

3、yList(); DataTable handDt,countDt;Hashtable objClassHt=new Hashtable ();/告警專業(yè),objectClass 字典表Hashtable lightHt = new Hashtable();/告警類型,燈顏色字典表private MQMsgProxy mqMsgProxy = null;private Handler hander = null;private AlarmFilter alarmFilter = null;private System.Timers.Timer timerMQReconnect;public S

4、erviceHandleStatus serviceHandleStatus = ServiceHandleStatus.Starting; public bool bSendSynchAlarm = true;public ArrayList aryAlarmItem = new ArrayList();/private Thread SAHandlerThread; private Socket clientSocket1; private Socket serverSocket1; private Socket clientSocket2; private Socket serverSo

5、cket2; private Socket clientSocket15; private Socket serverSocket15;private byte dataPro = new byte256; private int m = 0;億陽退服專題軟件V2.0 源代碼61-2private string strAutoSynch = "" private string strStartServiceSynch = "" private TcpListener listener;private Hashtable connections;/priv

6、ate OleDbConnection myDbConn; private OdbcConnection myDbConn; private int updateTime;private string phoneList;private string phoneMsg; #endregion/ 自動同步(以小時為)/ 啟動同步(以天為)#region <<<Properties>>> public TcpListener Listenergetreturn listener;setlistener = value;public Hashtable Clien

7、tConnectionsgetreturn connections;setconnections = value;#endregion#region before public Service()/ Thread.Sleep(20000); InitializeComponent();private bool InitMQ(bool bForceReconnect)億陽退服專題軟件V2.0 源代碼61-3bool bRet = true; tryif (bForceReconnect)if (mqMsgProxy != null)mqMsgProxy.Stop();mqMsgProxy = n

8、ull; clear();if (mqMsgProxy = null)mqMsgProxy = new MQMsgProxy(); mqMsgProxy.recAlarmMQMsgProxy.OnReceiveAlarm(OnReceiveAlarm);mqMsgProxy.alarmOperationMsg MQMsgProxy.OnAlarmOperationMsg(OnAlarmOperationMsg);mqMsgProxy.filterChangeMsgMQMsgProxy.OnFilterChangeMsg(OnFilterChanged);=new=new=newmqMsgPro

9、xy.mqClosed = new MQMsgProxy.OnMQClosed(OnMQClosed);bRet = mqMsgProxy.Start();catch (Exception ex)bRet = false;Debug.WriteDebugInfo(int)Debug.InfoType.Error, "ServiceError", "InitMQ 失敗:0。", ex.ToString();/this.hander.mqProxy = this.mqMsgProxy; return bRet;/thread runvoid SAHandle

10、rStart()try/Thread.Sleep(20000); InitDt(); LoadXmlData();phoneList = Config.AppSettings.GetStringValue("PhoneNumList", ""); phoneMsg = Config.AppSettings.GetStringValue("PhoneMsg", "");string strCon = Config.AppSettings.GetStringValue("NMOSDB.Con2",

11、"");/myDbConn = new OleDbConnection(strCon);億陽退服專題軟件V2.0 源代碼61-4myDbConn = new OdbcConnection(strCon); myDbConn.Open();Debug.WriteDebugInfo(int)Debug.InfoType.Information, "OpenDB", "數(shù)據(jù)庫連接:0", DateTime.Now.ToString();updateTime = Config.AppSettings.GetIntValue("Che

12、ckTime", 1) * 1000;初始化/啟動Socket,名和IP/ IPAddress serverIP = IPAddress.Parse(""); String hostname = Dns.GetHostName();IPAddress serverIP = Dns.GetHostEntry(hostname).AddressList0;/ Server Port = 13string Port1 = "13" / 13 端口用于與告警板之間的Socket 通信string Port2 = "14&qu

13、ot; / 14 端口用于與其他專業(yè)直接的接口Socket 通信string Port3 = "15" / 15 端口用于接受其他專業(yè)告警的SocketIPEndPoint serverhost1 = new IPEndPoint(serverIP, Int32.Parse(Port1); IPEndPoint serverhost2 = new IPEndPoint(serverIP, Int32.Parse(Port2);IPEndPoint serverhost15 = new IPEndPoint(serverIP, Int32.Parse(Port3);serve

14、rSocket1 = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);serverSocket2 = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);serverSocket15 = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);serverSocket1.Bind(serverhost1);se

15、rverSocket2.Bind(serverhost2); serverSocket15.Bind(serverhost15);/ Backlog = 50 serverSocket1.Listen(50); serverSocket2.Listen(50);serverSocket15.Listen(50);Thread p1 = new Thread(new ThreadStart(StartServer13); p1.Start();Thread p15 = new Thread(new ThreadStart(StartServer15);p15.Start();/Thread.Sl

16、eep(4000);Debug.WriteDebugInfo(int)Debug.InfoType.Information, "StartTime", "初始化開始時間:0", DateTime.Now.ToString();alarmFilter = new AlarmFilter();hander = new Handler();/components = new System.ComponentM.Container();timerMQReconnect = new System.Windows.Forms.Timer(ponents);億陽退服專

17、題軟件V2.0 源代碼61-5/timerMQReconnect.Interval = 10000;timerMQReconnect.Tick+=newSystem.EventHandler(this.timerMQReconnect_Tick);timerMQReconnect = new System.Timers.Timer(10000.00);timerMQReconnect.ElapsedSystem.Timers.ElapsedEventHandler(timerMQReconnect_Tick);+=newDebug.WriteDebugInfo(int)Debug.InfoTy

18、pe.Information,"StartTime","newSystem.EventHandler(this.timerMQReconnect_Tick)結束時間:0", DateTime.Now.ToString(); bool bOk = InitMQ(false);if (!bOk)serviceHandleStatus = ServiceHandleStatus.Stopping;if (hander != null)hander.Dispose();/this.hander.Stop();if (alarmFilter != null)ala

19、rmFilter.Dispose();/ return;throw new Exception("初始化MQ 連接失敗,將系統(tǒng)!");/ modify endDebug.WriteDebugInfo(int)Debug.InfoType.Information, "StartTime", " InitMQ(true)結束時間:0", DateTime.Now.ToString();Thread p14 = new Thread(new ThreadStart(StartServer14); p14.Start();/*/步和啟動服務的

20、同步/App.config 文件中的同步時間的配置,包括自動定時同strAutoSynch = Config.AppSettings"AutoSynchronize"同步(以小時為)strStartServiceSynch = Config.AppSettings"Synchronization"/ 自動/ 啟動同步(以天為)if (strAutoSynch != "")System.Threading.ThreadthreadAutoSynch=newSystem.Threading.Thread(new System.Thread

21、ing.ThreadStart(AutoSynch); threadAutoSynch.Start();/this.hander.Resamp();億陽退服專題軟件V2.0 源代碼61-6if (strStartServiceSynch != "")System.Threading.Threadt System.Threading.ThreadStart(SynchDataFromDB);=newSystem.Threading.Thread(newDebug.WriteDebugInfo(int)Debug.InfoType.Information, "Sync

22、hAlarm", "啟動同步告警的線程!t.Start()");t.Start();*/catch (Exception ex)Debug.WriteDebugInfo(int)Debug.InfoType.Error, "ServiceError", ex.ToString(); throw;/ <summary>/ 自動同步(以小時為/ </summary> void AutoSynch())每隔N 小時將內(nèi)存中的告警向告警板一次inime = int.Parse(strAutoSynch); / 以小時為while

23、 (true)Thread.Sleep(nTime * 3600 * 1000);Resamp();int nCount1 = hander.aryAlarms.Count; for (int nI = 0; nI < nCount1; nI+)stringfileType="PrintAlarmCatch_"+DateTime.Now.ToString("yyyyMMdd_HHmmss");AlarmItem aItem = (AlarmItem)hander.aryAlarmsnI;Debug.WriteDebugInfoNoSpe(int)D

24、ebug.InfoType.Error,fileType,aItem.ToString();if (aItem.Confirmed)if (aItem.RedSeverity = 6)SendMsgToClient("R;L;");elseSendMsgToClient("Y;O;");億陽退服專題軟件V2.0 源代碼61-7elseif (aItem.RedSeverity = 6)SendMsgToClient("R;");elseSendMsgToClient("Y;");Thread.Sleep(1000)

25、;void SynchDataFromDB()tryDebug.WriteDebugInfo(int)Debug.InfoType.Information,步告警的線程內(nèi)存空間");double dbStartSynch = double.Parse(strStartServiceSynch); DateTime dt = DateTime.Now;"SynchAlarm", "進入同string strCurTime = dt.ToString("yyyy-MM-dd HH:mm:ss"); dt = dt.AddDays(-dbS

26、tartSynch);string strTimeAfter3Days = dt.ToString("yyyy-MM-dd HH:mm:ss");/stringconnecionString="Provider=OraOLEDB.Oracle.1;Password=nmosoptr;Persist Security Info=True;User ID=nmosdb;DataSource=shnmos"/stringconnecionStringInfo=True;User=ID=informix;Data"Provider=Ifxoledbc;

27、Password=dba#pwd0;Persist Source=nmosdbids921"Securityint dbType = Config.AppSettings.GetIntValue("NMOSDB.DBType", 0);Debug.WriteDebugInfo(int)Debug.InfoType.Information, "SynchAlarm", "獲得數(shù)據(jù)庫類型NMOSDB.DBType:0", dbType);string strCon = Config.AppSettings.GetStringVa

28、lue("NMOSDB.Con", "");Debug.WriteDebugInfo(int)Debug.InfoType.Information, "SynchAlarm", "獲得數(shù)據(jù)庫聯(lián)接字符串NMOSDB.Con:0", strCon);string connectionString = strCon;Debug.WriteDebugInfo(int)Debug.InfoType.Information, "SynchAlarm", " 建立 connection 字符串:0&

29、quot;, connectionString);億陽退服專題軟件V2.0 源代碼61-8/ ack_flag = 0 為新的活動告警,ack_flag = 1 為確認的告警string strTmp = "select * from tfa_alarm where active_status = 1 and event_time between '0' and '1' and redefine_severity = 6 and ack_flag = 1"string queryString = string.Format(strTmp, s

30、trTimeAfter3Days, strCurTime);/Debug.WriteDebugInfo(int)Debug.InfoType.Information,同步告警數(shù)據(jù)SQL:0n", queryString);"SynchAlarm", "using (OleDbConnection connection = new OleDbConnection(connectionString)connection.Open();/Debug.WriteDebugInfo(int)Debug.InfoType.Information, "Syn

31、chAlarm", "connection.Open()建立連接!");OleDbCommand command = connection.CreateCommand(); command.CommandText = queryString;OleDbDataAdapter da = new OleDbDataAdapter(command); DataTable datatable = new DataTable();da.Fill(datatable);/Debug.WriteDebugInfo(int)Debug.InfoType.Information,

32、"SynchAlarm", "da.Fill(datatable)入數(shù)據(jù)表DataTable!");foreach (DataRow dr in datatable.Rows)添Debug.WriteDebugInfo(int)Debug.InfoType.Information, "SynchAlarm", DataTable 中的DataRow 填充AlarmItem 結構!");AlarmItem item = new AlarmItem();item.FP0 = BOCO.APP.Common.Util.Conv.T

33、oUint(dr"fp0"); item.FP1 = BOCO.APP.Common.Util.Conv.ToUint(dr"fp1"); item.FP2 = BOCO.APP.Common.Util.Conv.ToUint(dr"fp2"); item.FP3 = BOCO.APP.Common.Util.Conv.ToUint(dr"fp3"); item.CFP0 = BOCO.APP.Common.Util.Conv.ToUint(dr"c_fp0"); item.CFP1 = BOC

34、O.APP.Common.Util.Conv.ToUint(dr"c_fp1"); item.CFP2 = BOCO.APP.Common.Util.Conv.ToUint(dr"c_fp2"); item.CFP3 = BOCO.APP.Common.Util.Conv.ToUint(dr"c_fp3");"item.RedSeverity BOCO.APP.Common.Util.Conv.ToInt(dr"redefine_severity");item.ActiveStatus BOCO.APP.

35、Common.Util.Conv.ToInt(dr"active_status");item.AckFlag = BOCO.APP.Common.Util.Conv.ToInt(dr"ack_flag"); item.AlarmTitleBOCO.APP.Common.Util.Conv.ToInt(dr"alarm_title");item.ObjectClass BOCO.APP.Common.Util.Conv.ToInt(dr"object_class");item.ProbableCauseBOCO.AP

36、P.Common.Util.Conv.ToInt(dr"probable_cause");=/item.getAckFlag = BOCO.APP.Common.Util.Conv.ToInt(dr"ack_flag");item.Confirmed = true;億陽退服專題軟件V2.0 源代碼61-9Debug.WriteDebugInfo(int)Debug.InfoType.Information, "SynchAlarm", "同步到的告警數(shù)據(jù):fp0 = 0, c_fp0 = 1, redefine_severi

37、ty = 2", item.FP0, item.CFP0, item.RedSeverity);/this.hander.AddNewAlarm(item);if (item.IsNewAlarm)if (hander.IsExists(item) / 該告警已經(jīng)存在Debug.WriteDebugInfo(int)Debug.InfoType.Information, "repAlarm", "FP 相同:" + item.FPKey);return;elseif (item.ObjectClass = 101 && item

38、.ProbableCause = 102 | item.ObjectClass = 102 && item.ProbableCause = 102 | item.ObjectClass = 101 && item.ProbableCause = 122 | item.ObjectClass = 102 && item.ProbableCause = 122 | item.ObjectClass = 101 && item.ProbableCause = 2064|item.ObjectClass = 102 &&

39、item.ProbableCause = 2064)/hander.AddSynchAlarm(item); aryAlarmItem.Add(item);else if (item.IsClearAlarm)ClearAlarmByCFP(item.CFP0, item.CFP1, item.CFP2, item.CFP3);Thread.Sleep(1000);catch (Exception e)Debug.WriteDebugInfo(int)Debug.InfoType.Error, "SynchDataFromDB Error:n0", e.ToString()

40、;"MsgHanderError",/tread stopvoid SAHandlerStop()serviceHandleStatus = ServiceHandleStatus.Stopping;億陽退服專題軟件V2.0 源代碼61-10if (hander != null)hander.Dispose();/this.hander.Stop();if (mqMsgProxy != null)mqMsgProxy.Stop(); mqMsgProxy.Dispose();if (alarmFilter != null)alarmFilter.Dispose();myDb

41、Conn.Close();protected override void OnStart(string args)/ TODO: Add code here to start your service./Thread.Sleep(1000); SAHandlerStart();protected override void OnStop()/ TODO: Add code here to perform any tear-down necessary to stop your service.SAHandlerStop();public int SendMsgToClient(string s

42、trMsg)try/clientSocket1 = serverSocket1.Accept();byte byteData = Encoding.ASCII.GetBytes(strMsg.ToCharArray();m = clientSocket1.Send(byteData, 0, byteData.Length, SocketFlags.None); return 1;/Thread.Sleep(100);catch (Exception ex)clientSocket1.Close(); return 0;return m;public int SendMsgToClient14(

43、string strMsg)億陽退服專題軟件V2.0 源代碼61-11byte byteData = Encoding.ASCII.GetBytes(strMsg.ToCharArray();m = clientSocket2.Send(byteData, 0, byteData.Length, SocketFlags.None); return m;public bool Resamp()SendMsgToClient("Q;"); return true;public void ConfirmAlarm(uint fp0, uint fp1, uint fp2, uin

44、t fp3)lock (hander.aryAlarms)for (int i = 0; i < hander.aryAlarms.Count; i+)AlarmItem alarm = (AlarmItem)hander.aryAlarmsi; if (alarm.IsFPMatch(fp0, fp1, fp2, fp3)if (!alarm.Confirmed)alarm.Confirmed = true;string strFP = alarm.FP0.ToString() + ":" strFP += alarm.FP1.ToString() + "

45、:" strFP += alarm.FP2.ToString() + ":" strFP += alarm.FP3.ToString();Debug.WriteDebugInfoNoSpe(int)Debug.InfoType.Information,"AlampCmd", DateTime.Now.ToString() + "-確認告警FP:0rn", strFP);if (alarm.IsCriticalAlarm)SendMsgToClient("L;");elseSendMsgToClient(&

46、quot;O;");break;public void ClearAlarmByCFP(uint cfp0, uint cfp1, uint cfp2, uint cfp3)lock (hander.aryAlarms)億陽退服專題軟件V2.0 源代碼61-12int nCount = hander.aryAlarms.Count; for (int i = nCount - 1; i >= 0; i-)AlarmItem alarm = (AlarmItem)hander.aryAlarmsi; if (alarm.IsCFPMatch(cfp0, cfp1, cfp2, c

47、fp3)hander.aryAlarms.RemoveAt(i);string strFP = alarm.FP0.ToString() + ":" strFP += alarm.FP1.ToString() + ":" strFP += alarm.FP2.ToString() + ":" strFP += alarm.FP3.ToString();Debug.WriteDebugInfoNoSpe(int)Debug.InfoType.Information,"AlampCmd", DateTime.Now.T

48、oString() + "-清除告警FP:0rn", strFP);if (alarm.IsCriticalAlarm)if (!alarm.Confirmed)SendMsgToClient("L;C;");elseSendMsgToClient("C;");elseif (!alarm.Confirmed)SendMsgToClient("O;D;");elseSendMsgToClient("D;");public void ClearAlarmByFP(uint fp0, uint fp

49、1, uint fp2, uint fp3)lock (hander.aryAlarms)int nCount = hander.aryAlarms.Count; for (int i = nCount - 1; i >= 0; i-)億陽退服專題軟件V2.0 源代碼61-13AlarmItem alarm = (AlarmItem)hander.aryAlarmsi; if (alarm.IsFPMatch(fp0, fp1, fp2, fp3)hander.aryAlarms.RemoveAt(i); if (alarm.IsCriticalAlarm)if (!alarm.Conf

50、irmed)SendMsgToClient("L;C;");elseSendMsgToClient("C;");elseif (!alarm.Confirmed)SendMsgToClient("O;D;");elseSendMsgToClient("D;");break;private AlarmItem ToNewAlarmItem(System.Xml.XmlDocument alarmMsgXmlDoc)System.Xml.XmlNodealarmNode=alarmMsgXmlDoc.SelectSin

51、gleNode("/xml/message/OneRecord"); AlarmItem item = new AlarmItem();item.FP0 = BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"fp0".Value); item.FP1 = BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"fp1".Value); item.FP2 = BOCO.APP.Common.Util.Conv.ToUint(al

52、armNode.Attributes"fp2".Value); item.FP3 = BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"fp3".Value); item.CFP0BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"c_fp0".Value); item.CFP1BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"c_fp1".Va

53、lue); item.CFP2BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"c_fp2".Value); item.CFP3BOCO.APP.Common.Util.Conv.ToUint(alarmNode.Attributes"c_fp3".Value); item.ObjectClass=億陽退服專題軟件V2.0 源代碼61-14BOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"object_class".Val

54、ue); item.ActiveStatusBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"active_status".Value); item.RedSeverityBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"redefine_severity".Value); item.Ne_idBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"int_id".Value

55、); item.OrgTypeBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"org_type".Value); item.TimeStampBOCO.APP.Common.Util.Conv.ToStr(alarmNode.Attributes"event_time".Value); item.SubAlarmTypeBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"sub_alarm_type".Value); ite

56、m.AckFlagBOCO.APP.Common.Util.Conv.ToInt(alarmNode.Attributes"ack_flag".Value);=tryalarmNode = alarmMsgXmlDoc.SelectSingleNode("/xml/message"); item.Serial = int.Parse(alarmNode.Attributes"msg_serial".Value);catchitem.Serial = 1;return item;protected void OnMQClosed(str

57、ing strMsg)serviceHandleStatus = ServiceHandleStatus.Stopping;/if (serviceHandleStatus != ServiceHandleStatus.Stopping &&/!timerMQReconnect.Enabled)timerMQReconnect.Interval = 10 * 1000;/ 10s timerMQReconnect.Enabled = true; Debug.WriteDebugInfo(int)Debug.InfoType.Error, "ServiceError","MQ Closed, will reconnect after 10s.");private void timerMQReconnect_Tick(object sender, EventArgs e)bool bOk = InitMQ(true); Debug.WriteDebugInfo(int)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論