From 925ab619ead90124abdab6202d91980d992b1e11 Mon Sep 17 00:00:00 2001
From: ulysseskao <ulysseskao@gmail.com>
Date: Tue, 03 May 2016 19:33:17 +0800
Subject: [PATCH] add thread setting
---
CCSTrace/CCS/ProcessEvent.cs | 3
CCSTrace/CCS/CCSMain.cs | 45 +++++++++++---
CCSTrace/App_Data/DBConfig.xml | 1
CCSTrace/CCS/Object/AlarmData.cs | 98 +++++++++++++++++---------------
CCSTrace/CCSTrace.csproj | 2
CCSTrace/DBConfig.xml | 1
6 files changed, 89 insertions(+), 61 deletions(-)
diff --git a/CCSTrace/App_Data/DBConfig.xml b/CCSTrace/App_Data/DBConfig.xml
index c9641d1..109e76a 100644
--- a/CCSTrace/App_Data/DBConfig.xml
+++ b/CCSTrace/App_Data/DBConfig.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="big5" ?>
<CCS>
<DBSetting DataSource = "nntpc" UserId = "basedb" Password = "BASEDB000" ConnectionCount = "3" ShowError = "false" />
+ <ThreadSetting maxThreadSize="2" minThreadSize="1" />
</CCS>
\ No newline at end of file
diff --git a/CCSTrace/CCS/CCSMain.cs b/CCSTrace/CCS/CCSMain.cs
index 49b05a5..a9a480b 100644
--- a/CCSTrace/CCS/CCSMain.cs
+++ b/CCSTrace/CCS/CCSMain.cs
@@ -77,8 +77,8 @@
throw;
}
- var addrContrast = AddrContrast.Instance;
- addrContrast.initialize(_mainConn);
+ AddrContrast.Instance.Initialize(_mainConn);
+ AlarmData.Instance.Initialize(_mainConn);
CCSEventRecord ccsEventRecord = GetWaitRecord(_mainConn);
@@ -108,11 +108,32 @@
GC.WaitForPendingFinalizers();
}
+ public void AcceptEvent2(CCSEventRecord ccsEventRecord)
+ {
+ // WorkItemCallback workItemCallback = new WorkItemCallback(this.DoEventWork);
+ _mainjobThreadPool.QueueWorkItem(DoEventWork, ccsEventRecord);
+ }
+
+ private void DoEventWork(CCSEventRecord state)
+ {
+ OracleConnection conn;
+ lock (_syncDbQueue) conn = _dbQueue.Dequeue();
+
+ try
+ {
+ AcceptEvent(state);
+ }
+ finally
+ {
+ lock (_syncDbQueue) _dbQueue.Enqueue(conn);
+ }
+
+
+ }
+
public void AcceptEvent(CCSEventRecord ccsEventRecord)
{
/*
- WorkItemCallback workItemCallback = new WorkItemCallback(this.DoWork);
- _mainjobThreadPool.QueueWorkItem(workItemCallback, ccsEventRecord);
WIGStartInfo wigStartInfo = new WIGStartInfo()
{
FillStateWithArgs = true,
@@ -138,7 +159,7 @@
if (waitCcsEventRecord != null)
{
- OracleConnection conn = null;
+ OracleConnection conn;
lock (_syncDbQueue) conn = _dbQueue.Dequeue();
ProcessCase(waitCcsEventRecord, conn);
}
@@ -170,10 +191,12 @@
{
string file = Path.Combine(AppDataPath, DbConfigFilename);
// 建立 XML 讀取器
- XmlReaderSettings settings = new XmlReaderSettings();
- settings.IgnoreComments = true; // 不處理註解
- settings.IgnoreWhitespace = true; // 跳過空白
- settings.ValidationType = ValidationType.None; // 不驗證任何資料
+ XmlReaderSettings settings = new XmlReaderSettings
+ {
+ IgnoreComments = true, // 不處理註解
+ IgnoreWhitespace = true, // 跳過空白
+ ValidationType = ValidationType.None // 不驗證任何資料
+ };
reader = XmlReader.Create(file, settings);
// 進入讀取主要部分
@@ -231,8 +254,8 @@
{
OracleConnectionStringBuilder builder = new OracleConnectionStringBuilder(GlobalVariable.ConnectionString)
{
- MaxPoolSize = 20,
- MinPoolSize = 5,
+ MaxPoolSize = GlobalVariable.MaxConnectionCount,
+ MinPoolSize = 1,
Pooling = true
};
string connectstring = builder.ToString();
diff --git a/CCSTrace/CCS/Object/AlarmData.cs b/CCSTrace/CCS/Object/AlarmData.cs
index 6ea8f2c..e8cd1e9 100644
--- a/CCSTrace/CCS/Object/AlarmData.cs
+++ b/CCSTrace/CCS/Object/AlarmData.cs
@@ -1,9 +1,10 @@
using System;
-
using System.Collections;
+using System.Collections.Generic;
using System.Data.OracleClient;
using System.Net;
using System.Net.Sockets;
+using CCSTrace.TPower.DMMS.Model.CCS;
using NLog;
namespace CCSTrace.CCS.Object
@@ -11,30 +12,34 @@
public class AlarmData
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
- private Hashtable _mTotalData = new Hashtable();
- private OracleConnection _connectionTpc;
- private OracleTransaction _transaction;
- public AlarmData(OracleConnection conn, OracleTransaction trx)
+ public static AlarmData Instance { get; } = new AlarmData();
+
+ private readonly Dictionary<int, ALARMIP> _totalAddrData = new Dictionary<int, ALARMIP>();
+
+ private AlarmData()
{
- _connectionTpc = conn;
- _transaction = trx;
+ }
+ public void Initialize(OracleConnection conn)
+ {
var sqlStmt = "SELECT DEPTID,IP1,IP2,IP_PATROL FROM CCS.ALARM_IP";
- OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
+ OracleCommand command = new OracleCommand(sqlStmt, conn);
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());
+ ALARMIP tmp = new ALARMIP
+ {
+ DEPTID = Convert.ToInt32(reader["DEPTID"].ToString()),
+ IP1 = reader["IP1"].ToString(),
+ IP2 = reader["IP2"].ToString(),
+ IPPATROL = reader["IP_Patrol"].ToString()
+ };
- _mTotalData.Add(Convert.ToInt32(reader["DeptID"].ToString()), tmp);
+ _totalAddrData.Add(tmp.DEPTID, tmp);
}
}
catch (Exception e)
@@ -84,27 +89,27 @@
return ssccode;
}
- private ArrayList GetIpAddress(int deptCode)
+ private ALARMIP GetIpAddress(int deptCode)
{
- return (ArrayList)_mTotalData[Convert.ToInt32(deptCode)];
+ return _totalAddrData[deptCode];
}
- public bool Alarm(string acceptNum, int dept)
+ public bool Alarm(OracleConnection conn, OracleTransaction trx, string acceptNum, int dept)
{
Logger.Info("開始Alarm...");
- Socket mClient;
- ArrayList ipAddressSet = GetIpAddress(GetSscCode(dept, Convert.ToInt32(DateTime.Now.DayOfWeek)));
+ Socket clientSocket;
+ ALARMIP alarmip = GetIpAddress(GetSscCode(dept, Convert.ToInt32(DateTime.Now.DayOfWeek)));
string ip1;
string ip2;
string ipPatrol;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
- if (ipAddressSet != null)
+ if (alarmip != null)
{
Logger.Info("已取得該部門所需通知的IP Address.");
- ip1 = ipAddressSet[1].ToString();
- ip2 = ipAddressSet[2].ToString();
- ipPatrol = ipAddressSet[3].ToString();
+ ip1 = alarmip.IP1;
+ ip2 = alarmip.IP2;
+ ipPatrol = alarmip.IPPATROL;
}
else
{
@@ -115,18 +120,18 @@
try
{
IPAddress serverIp = IPAddress.Parse(ip1);
- int serverPort = Convert.ToInt32(GlobalVariable.AlermPort);
+ var serverPort = Convert.ToInt32(GlobalVariable.AlermPort);
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
- mClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- mClient.Connect(iep);
+ clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ clientSocket.Connect(iep);
byte[] byteMessage = encoding.GetBytes(acceptNum);
- mClient.Send(byteMessage);
- mClient.Shutdown(SocketShutdown.Both);
- mClient.Close();
- RecordAlarmIp(acceptNum, ip1);
+ clientSocket.Send(byteMessage);
+ clientSocket.Shutdown(SocketShutdown.Both);
+ clientSocket.Close();
+ RecordAlarmIp(conn, trx, acceptNum, ip1);
Logger.Info("已成功通知" + ip1 + " !");
return true;
}
@@ -138,18 +143,18 @@
try
{
IPAddress serverIp = IPAddress.Parse(ip2);
- int serverPort = Convert.ToInt32(GlobalVariable.AlermPort);
+ var serverPort = Convert.ToInt32(GlobalVariable.AlermPort);
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
- mClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- mClient.Connect(iep);
+ clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ clientSocket.Connect(iep);
byte[] byteMessage = encoding.GetBytes(acceptNum);
- mClient.Send(byteMessage);
- mClient.Shutdown(SocketShutdown.Both);
- mClient.Close();
- RecordAlarmIp(acceptNum, ip2);
+ clientSocket.Send(byteMessage);
+ clientSocket.Shutdown(SocketShutdown.Both);
+ clientSocket.Close();
+ RecordAlarmIp(conn, trx, acceptNum, ip2);
Logger.Info("已成功通知" + ip2 + " !");
return true;
}
@@ -164,15 +169,15 @@
int serverPort = Convert.ToInt32(GlobalVariable.AlermPort);
IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
- mClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- mClient.Connect(iep);
+ clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ clientSocket.Connect(iep);
byte[] byteMessage = encoding.GetBytes(acceptNum);
- mClient.Send(byteMessage);
- mClient.Shutdown(SocketShutdown.Both);
- mClient.Close();
- RecordAlarmIp(acceptNum, ipPatrol);
+ clientSocket.Send(byteMessage);
+ clientSocket.Shutdown(SocketShutdown.Both);
+ clientSocket.Close();
+ RecordAlarmIp(conn, trx, acceptNum, ipPatrol);
Logger.Info("已成功通知" + ipPatrol + " !");
return true;
}
@@ -184,11 +189,11 @@
}
}
- private void RecordAlarmIp(string accNum, string ip)
+ private void RecordAlarmIp(OracleConnection conn, OracleTransaction trx, string accNum, string ip)
{
- string sqlStmt = "insert into eos.case_dispatch (acceptnum,alarmip) values('" + accNum + "','" + ip + "')";
+ string sqlStmt = "INSERT INTO EOS.CASE_DISPATCH (ACCEPTNUM,ALARMIP) VALUES('" + accNum + "','" + ip + "')";
- OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
+ OracleCommand command = new OracleCommand(sqlStmt, conn, trx);
try
{
@@ -198,7 +203,6 @@
catch (Exception e)
{
Logger.Error("recordAlarmIP Error." + e.Message);
- return;
}
finally
{
diff --git a/CCSTrace/CCS/ProcessEvent.cs b/CCSTrace/CCS/ProcessEvent.cs
index e4bbbde..6e08771 100644
--- a/CCSTrace/CCS/ProcessEvent.cs
+++ b/CCSTrace/CCS/ProcessEvent.cs
@@ -290,8 +290,7 @@
// 須等全部動作都正確做完才可作commit的動作
_trx.Commit();
_trx.Dispose();
- var alarmClient = new AlarmData(_connectionTpc, _trx);
- alarmClient.Alarm(_eosEventRecord.AcceptNum, _eosEventRecord.Dept);
+ AlarmData.Instance.Alarm(_connectionTpc, _trx, _eosEventRecord.AcceptNum, _eosEventRecord.Dept);
}
else
{
diff --git a/CCSTrace/CCSTrace.csproj b/CCSTrace/CCSTrace.csproj
index 2a67135..34d5f6e 100644
--- a/CCSTrace/CCSTrace.csproj
+++ b/CCSTrace/CCSTrace.csproj
@@ -174,7 +174,7 @@
<Compile Include="CCS\Function\Leach.cs" />
<Compile Include="CCS\Function\MergeCase.cs" />
<Compile Include="CCS\NHibertnateSession.cs" />
- <Compile Include="CCS\Object\Addr_Contrast.cs" />
+ <Compile Include="CCS\Object\AddrContrast.cs" />
<Compile Include="CCS\Object\AlarmData.cs" />
<Compile Include="CCS\Object\CCSCodelist.cs" />
<Compile Include="CCS\Object\CCSEventRecord.cs" />
diff --git a/CCSTrace/DBConfig.xml b/CCSTrace/DBConfig.xml
index f7cacb7..ad9b2f1 100644
--- a/CCSTrace/DBConfig.xml
+++ b/CCSTrace/DBConfig.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="big5" ?>
<CCS>
<DBSetting DataSource = "nntpc" UserId = "basedb" Password = "BASEDB000" ConnectionCount = "3" ShowError = "false" />
+ <ThreadSetting maxThreadSize="2" minThreadSize="1" />
</CCS>
\ No newline at end of file
--
Gitblit v0.0.0-SNAPSHOT