ulysseskao
2016-05-03 925ab619ead90124abdab6202d91980d992b1e11
add thread setting
6 files modified
150 ■■■■■ changed files
CCSTrace/App_Data/DBConfig.xml 1 ●●●● patch | view | raw | blame | history
CCSTrace/CCS/CCSMain.cs 45 ●●●● patch | view | raw | blame | history
CCSTrace/CCS/Object/AlarmData.cs 98 ●●●● patch | view | raw | blame | history
CCSTrace/CCS/ProcessEvent.cs 3 ●●●● patch | view | raw | blame | history
CCSTrace/CCSTrace.csproj 2 ●●● patch | view | raw | blame | history
CCSTrace/DBConfig.xml 1 ●●●● patch | view | raw | blame | history
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>
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();
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
            {
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
                {
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" />
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>