之前Chming 在我Blog 問我之後,過不久Vincent 在UCMA 論壇問了相同的問題(國人推斷兩人應該是同一人),可惜到最後都沒有人會。沒關係,我們來看看國人如何讓機器人在20 分鐘之後仍然會理國人吧。
這篇的步驟是教大家從IDKStudioServer 改裝成會持續收到訊息的機器人,希望對UCMA 的開發者會有幫助。我先把重點放在如何解決,然後再稍微討論一下,我對為什麼可以成功的見解。
開始修改程式碼:
首先,先開啟有Connection Manager 的程式碼(這邊僅更改TLS 部分,TCP 部分相信聰明的你可以舉一反三):
- 先將private 變數_connectionManager 的型別改為"RealTimeConnectionManager"
- 在RegisterEndpoint 的一開頭加入以下語法
IPAddress localIpAddress = Dns.GetHostAddresses(Dns.GetHostName())[0];
- 跳到TLS 的區塊(如果是TLS 則執行...)裡面增加一個變數
RealTimeServerTlsConnectionManager serverTlsConnectionManager;
- 刪除
_connectionManager = (RealTimeServerConnectionManager)new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"
換成serverTlsConnectionManager = new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"
- 在catch 外面加入以下程式碼:
//Turn on MTLS so that InteractiveBot can be trusted by OCS.
serverTlsConnectionManager.NeedMutualTls = true;
_connectionManager = (RealTimeConnectionManager)serverTlsConnectionManager;
if (!serverTlsConnectionManager.IsListening)
{
try
{
serverTlsConnectionManager.StartListening(new IPEndPoint(localIpAddress, 0));
}
catch (ConnectionFailureException e)
{
hrow new InvalidOperationException(e.Message);
}
} - 接下來要把RegisterCallback 裡面的
_connectionManager.StartListening(new IPEndPoint(IPAddress.Loopback, 0));
刪掉或注掉吧 - 打完收工!
我們來看看之前問題出在哪?為什麼機器人不回應了。
我以為問題出在RealTimeServerConnectionManager ,雖然到現在我仍然搞不清楚這麼多種Connection Manager 有什麼特別的目的。總之就是把Connection Manager 換成RealTimeConnectionManager 就ok了。此外,RealTimeConnectionManager 不支援StartListening 方法,但是在轉型之前我們仍然可以用RealTimeServerTlsConnectionManager 取得這個方法。所以在該篇Marc Wetters (reply#3) 有回答到點,問題的確出在Connection Manager ,也許是他一時口誤吧。
順帶一提,這些程式碼其實是跟Interactive Bot 有樣學樣做出來的,因為那時候Chming 提醒了我,Interactive Bot 可以持續回應,為什麼IDK Bot 卻不行...恩,總之以後在開發機器人的時候請大家愛用RealTimeConnectionManager ,不用再跟什麼鬼RealTimeServerConnectionManager 玩了吧!
讀者回應 ( 4 意見 )
訂閱張貼留言 (Atom)
To Function,
還是你厲害,真的讓你解決了。佩服 佩服!
沒錯我既是chming又是vincent,我之前也有看到Interactive Bot的這一段為何要多用一個RealTimeConnectionManager,本來也想要跟著這樣做,不過還是先從其他方向去Try。這個問題可以解決,相信對開發bot的人有非常大的幫助,真是太感激你啦!
Chming
To Chming:
哈哈~~果然!! 不過其實我真的很不滿意老外回問題的速度,還是國人比較好XD
今天測過...機器人放三個小時都是沒有問題的!! 一起努力吧(把我在MSDN 上的回答按為解答吧:P)
谢谢,我的问题解决一点。在你博客里的那几篇文章很有用。
@linweifu
謝謝你的鼓勵喔!!我也是希望能幫助更多的人:)
另外,你MSN我也加你了,就像你說的,也希望能彼此交流(以文會友~哈)
張貼留言
如果沒有帳戶,建議使用「名稱/網址」留言喔^^