在發行 1.0.06211 版本後, 進行的修改日誌
TODO:
Bug:
當plcsnd送出PE01(70bytes), 但表訂PE01為64bytes, 故plcrcv會分兩次進行資料擷取, 第一次擷取64bytes, 並回送reply ack, 此時plcsnd會等候接收reply ack, plcrcv進行第二次擷取6bytes, 並回送reply ack, 此時plcsnd已不會主動接收reply ack, 卻會導致listenDisconnected(), peekN()有資料, 而一直迴圈peekN(), 而一直引發syslog()
2013.07.01 (changeset 5)
ExceptHandler::
# 加入 ExceptHandler, 加強應用程序發生exception時, 可以記錄stack trace infomation
2013.07.05 (changeset 5)
SockTcpHandler::
# 修正bug: 當外部程式呼用listenDisconnect(), 監聽斷線信號, 重新建立連線, 若同時呼用sendtoServer(), 函式內部也會重新建立連線, 兩者會相互影響, 導致引發socket exception, 終止程序
# 當外部程式呼用listenDisconnect()時, 強制將sendtoServer()的自動重連的機制關閉
TimerHandler::
# 修正 bug: 沒有正常終止回收thread object的資源
# 修改TimerInfo_T, 加入屬性 HANDLE hnd, 記錄handle of thread
# 修改tm_func(), 加入_endthreadex()
# 修改~TimerHandler(), 使用WaitForSingleObject(), 等待thread正常結束回應
# 修改~TimerHandler(), 使用CloseHandle(), 強制thread結束, 並回收資源
# 修改remove(), 使用WaitForSingleObject(), 等待thread正常結束回應
# 修改remove(), 使用CloseHandle(), 強制thread結束, 並回收資源
2013.07.10 (* 重大修改, 演進為 1.1.xxxxx 版本號) (changeset 6)
ApMsgHandler::
# 增加ap_syslog(), 編組訊息日誌, 並拋送至MQ_LOGGER (意使將log message的I/O作業, 委由其它程式處理)
xxxxxHandler::
# 啟用ap_syslog(), 編譯程式前, 預先定義_SYSLOG, 以將所有ap_log() 置換為 ap_syslog()
2013.07.11 (changeset 6)
ApMsgHandler::
# MQ_LOGGER, MQ_PCCOMM, MQ_RECORDER, MQ_MSGMGR視為物件全域變數, 預設開啟並聯附MSMQ
# 呼用alarm(), sendHmi(), replyHmi(), ap_syslog (), 皆使用上述已開啟並聯附的MSMQ
# 減少快速頻繁開啟-->關閉MSMQ, 導致效能低落
2013.07.11 (changeset 6)
LogHandler::
LogHandlerEx::
# 修改formation(), 記錄日誌時間至毫秒單位(milli-second)
# 增加getDTimeMsec(), 取得目前時間至毫秒單位(milli-second)
2013.07.16 (changeset 7)
LogHandler::
# 首次開啟log file時, 寫入NGO middle-ware be compiled date time
# 換日或分割log file時, 寫入NGO middle-ware be compiled date time
# 利於發行版本的確認及追蹤
2013.08.12 (changeset 8)
SockTcpHandler::
# 回呼外部指定函式指標前, 增加log, 以確認是否有執行該回呼函式
# 當遠端主機無回覆任何ACK message(NOP), 不斷線並持續重送, 達到3次時, 才會斷線重新連線
2013.08.12 (changeset 10)
ApMsgHandler::
# 常用的MSMQ, 改以static形式宣告, 以提升執行效率, 避免一再重覆建立
# MQ_MSGMGR, MQ_LOGGER, MQ_PCCOMM, MQ_RECORDER, MQ_SYS
2013.08.14 (changeset 11)
Fixed Bug #N/A :
- 因為ApMsgHandler的生成, 較早於main()中LogHandler的生成, 導致會產生無路徑的log file
- 未定義_SYSLOG, 則避免生成SysLogMQ
** commonlib - ApMsgHandler **
當定義_SYSLOG, 才會生成SysLogMQ
當定義_SYSLOG, ap_syslog才會生效
2013.08.14 (changeset 12)
Fixed Bug #N/A :
- 監聽遠端主機是否關閉連線機制, 仍會引發非預期的例外異常, 導致無法再主動重新連線, 甚至中止程序
- 設計原則, 儘量避免主動式關閉連線, 多利用回傳eACK, 交由外部應用層決定是否關閉連線, ex: sendtoServer(), listenDisconnected()
** commonlib - SockTcpHandler **
modify function, listenDisconnected(), 取消主動關閉連線作業
modify function, close(), 當CSock<0時, 仍必須將fConnect初始為false
modify function, sendtoServer(), 取消主動關閉連線作業
2013.10.04 (changeset 13)
Fixed Bug #N/A -- to fixed some bugs
- 將GetLabel() and GetFormatName()註解, 不記錄相關log
** IPCHandler -- MSQHandder.h / MSQHandler.cpp **
(1) 修改create(), 註解呼叫GetLabel() and GetFormatName()之程式碼
2013.10.04 (changeset 14)
Changed #N/A -- enhance that reject client connection, and buffer size
- 在回呼OnAccepted(), 可以由外部決定是否拒絕當次連線
- 擴充緩衝區的容量
** DLHandler -- SockTcpHandler.h / SockTcpHandler.cpp **
(1) 修改acceptClient(), 回呼OnAccepted()的傳回值<=0時, 表示外部拒絕當次連線
(2) 修改runSingleSvr(), 依據acceptClient()的回傳值因應不同程序, 小於0:表示連線異常, 等於0表示外部拒絕當次連線並中斷連線, 大於0表示接受連線
(3) 修改MAXDATA, 由4096變更為8192, Buf[]及RBuf[]皆擴增至8192 bytes
2013.10.04 (changeset 15)
Fixed #N/A -- date time could milli-second precision
- 日期時間格式, 只能精確至亳秒(1/1000sec)
** DataHandler -- DataHandler.h / DataHandler.cpp **
(1) 修改getDTimeMsec(), 由6位微秒減為3位毫秒
2013.10.04 (changeset 16)
Fixed #N/A -- enhance some log
- 針對外部回呼函式, 增加log記錄
** DLHandler -- RpcHandler.h / RpcHandler.cpp **
(1) 修改receiveFunc(), 回呼OnReceive(), 增加log
(2) 修改sendServer(), 回呼AfterSend), 增加log
2013.12.03 (changeset 17)
Fixed #N/A -- remove winsock header file from IniHandler
- 避免winsock.h & winsock2.h衝突
** IniHandler -- IniHandler.h **
(1) 移除winsock2.h & ws2tcpip.h & ws2_32.lib
Fixed #N/A -- remove external argument when call ApMsgHandler::alarm ()
- 移除SYSTEM / Client 的附加資訊
** ApMsgHandler -- ApMsgHandler.cpp **
(1) alarm(), 移除argument[9]的資訊