using System;
|
using System.Data;
|
using System.Configuration;
|
using System.Web;
|
using System.Web.Security;
|
using System.Web.UI;
|
using System.Web.UI.HtmlControls;
|
using System.Web.UI.WebControls;
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Collections;
|
using System.Data.OracleClient;
|
using System.Net;
|
using System.Net.Sockets;
|
using System.IO;
|
|
namespace CCSTrace.CCS.Object
|
{
|
public class AlarmData
|
{
|
private Hashtable m_TotalData = new Hashtable();
|
private RecordLog _PLog;
|
private OracleConnection _ConnectionTPC;
|
private OracleTransaction _Transaction;
|
|
public AlarmData(OracleConnection _Conn,OracleTransaction _Trx, RecordLog _Log)
|
{
|
_ConnectionTPC = _Conn;
|
_Transaction = _Trx;
|
_PLog = _Log;
|
|
String SqlStmt;
|
|
SqlStmt = "SELECT DEPTID,IP1,IP2,IP_PATROL FROM CCS.ALARM_IP";
|
OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);
|
OracleDataReader reader = Command.ExecuteReader();
|
|
try
|
{
|
while (reader.Read())
|
{
|
ArrayList Tmp = new ArrayList();
|
Tmp.Add(Convert.ToInt32(reader["DEPTID"].ToString()));
|
Tmp.Add(reader["IP1"].ToString());
|
Tmp.Add(reader["IP2"].ToString());
|
Tmp.Add(reader["IP_Patrol"].ToString());
|
|
m_TotalData.Add(Convert.ToInt32(reader["DeptID"].ToString()), Tmp);
|
}
|
}
|
catch (Exception e)
|
{
|
_PLog.Error("Problems occur when fetch alarm data: (" + e.Message + ")");
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
}
|
|
private int getSSCCode(int m_SCCode, int m_Week) {
|
int ssccode = m_SCCode;
|
|
/* DateTime stime = DateTime.Now;
|
|
DateTime endtime = DateTime.Now;
|
|
String SqlStmt = "select g.ssc_code as SSCCODE,t.begintime as BEGINTIME,t.endtime as ENDTIME,t.week as WEEK from ccs.scgroup g,ccs.scgrouptime t where g.groupid=t.groupid and g.sc_code="
|
+ m_SCCode + " and t.week=" + m_Week;
|
|
try {
|
OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC);
|
OracleDataReader reader = Command.ExecuteReader();
|
|
while (reader.Read())
|
{
|
stime.set(Calendar.DAY_OF_WEEK, Rs.getInt("WEEK"));
|
endtime.set(Calendar.DAY_OF_WEEK, Rs.getInt("WEEK"));
|
stime.set(Calendar.HOUR_OF_DAY, Rs.getInt("BEGINTIME"));
|
endtime.set(Calendar.HOUR_OF_DAY, Rs.getInt("ENDTIME"));
|
|
if (stime.after(endtime))
|
endtime.roll(Calendar.DAY_OF_WEEK, 1);
|
|
if (stime.before(nowtime) && (endtime.after(nowtime)))
|
ssccode = Rs.getInt("SSCCODE");
|
|
}
|
reader.Close();
|
Command.Dispose();
|
} catch (Exception ex) {
|
_PLog.warn("無法取得SSCCode,以該案件所屬SCCode代替: (" + ex.Message + ")");
|
}*/
|
return ssccode;
|
}
|
|
private ArrayList getIPAddress(int DeptCode) {
|
return (ArrayList) m_TotalData[Convert.ToInt32(DeptCode)];
|
}
|
|
public bool alarm(String AcceptNum, int Dept)
|
{
|
|
_PLog.Info("開始Alarm...");
|
System.Net.Sockets.Socket m_Client;
|
ArrayList IPAddressSet = this.getIPAddress(this.getSSCCode(Dept, Convert.ToInt32(DateTime.Now.DayOfWeek)));
|
String IP1;
|
String IP2;
|
String IP_Patrol;
|
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
|
|
if (IPAddressSet != null)
|
{
|
_PLog.Info("已取得該部門所需通知的IP Address.");
|
IP1 = IPAddressSet[1].ToString();
|
IP2 = IPAddressSet[2].ToString();
|
IP_Patrol = IPAddressSet[3].ToString();
|
} else {
|
_PLog.Warn("無法取得該部門所需通知的IP Address!");
|
return false;
|
}
|
|
try {
|
IPAddress serverIp = IPAddress.Parse(IP1);
|
int serverPort = Convert.ToInt32(CCS.LocalVariable.AlermPort);
|
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
|
|
m_Client = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
m_Client.Connect(iep);
|
|
byte[] byteMessage = encoding.GetBytes(AcceptNum);
|
|
m_Client.Send(byteMessage);
|
m_Client.Shutdown(SocketShutdown.Both);
|
m_Client.Close();
|
this.recordAlarmIP(AcceptNum, IP1);
|
_PLog.Info("已成功通知" + IP1 + " !");
|
return true;
|
|
} catch (Exception e) {
|
_PLog.Warn("無法通知" + IP1 + ": " + e.Message);
|
}
|
|
try {
|
IPAddress serverIp = IPAddress.Parse(IP2);
|
int serverPort = Convert.ToInt32(CCS.LocalVariable.AlermPort);
|
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
|
|
m_Client = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
m_Client.Connect(iep);
|
|
byte[] byteMessage = encoding.GetBytes(AcceptNum);
|
|
m_Client.Send(byteMessage);
|
m_Client.Shutdown(SocketShutdown.Both);
|
m_Client.Close();
|
this.recordAlarmIP(AcceptNum, IP2);
|
_PLog.Info("已成功通知" + IP2 + " !");
|
return true;
|
}
|
catch (Exception e)
|
{
|
_PLog.Warn("無法通知" + IP2 + ": " + e.Message);
|
}
|
|
try {
|
IPAddress serverIp = IPAddress.Parse(IP_Patrol);
|
int serverPort = Convert.ToInt32(CCS.LocalVariable.AlermPort);
|
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
|
|
m_Client = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
m_Client.Connect(iep);
|
|
byte[] byteMessage = encoding.GetBytes(AcceptNum);
|
|
m_Client.Send(byteMessage);
|
m_Client.Shutdown(SocketShutdown.Both);
|
m_Client.Close();
|
this.recordAlarmIP(AcceptNum, IP_Patrol);
|
_PLog.Info("已成功通知" + IP_Patrol + " !");
|
return true;
|
}
|
catch (Exception e)
|
{
|
_PLog.Warn("無法通知" + IP_Patrol + ": " + e.Message);
|
_PLog.Warn("三個IP均無法通知到!");
|
return false;
|
}
|
}
|
|
private void recordAlarmIP(String AccNum, String IP) {
|
String SqlStmt = "insert into eos.case_dispatch (acceptnum,alarmip) values('" + AccNum + "','" + IP + "')";
|
|
OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);
|
|
try
|
{
|
|
if (Command.ExecuteNonQuery() <= 0)
|
_PLog.Warn("無法紀錄Alarm IP!");
|
}
|
catch (Exception e)
|
{
|
_PLog.Error("recordAlarmIP Error." + e.Message);
|
return;
|
}
|
finally
|
{
|
Command.Dispose();
|
}
|
|
}
|
|
}
|
}
|