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