About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

UCMA Simple Bot Part 3 (如何解決8分鐘機器人不回應的問題)

FUNction 於 2008年6月19日 下午3:12 發表
English Title: [HOW TO] Solve the UCMA Bot can't receive invite or message after 8 mins.

之前Chming 在我Blog 問我之後,過不久Vincent 在UCMA 論壇問了相同的問題(國人推斷兩人應該是同一人),可惜到最後都沒有人會。沒關係,我們來看看國人如何讓機器人在20 分鐘之後仍然會理國人吧。

這篇的步驟是教大家從IDKStudioServer 改裝成會持續收到訊息的機器人,希望對UCMA 的開發者會有幫助。我先把重點放在如何解決,然後再稍微討論一下,我對為什麼可以成功的見解。

開始修改程式碼:
首先,先開啟有Connection Manager 的程式碼(這邊僅更改TLS 部分,TCP 部分相信聰明的你可以舉一反三):
  1. 先將private 變數_connectionManager 的型別改為"RealTimeConnectionManager"
  2. 在RegisterEndpoint 的一開頭加入以下語法
    IPAddress localIpAddress = Dns.GetHostAddresses(Dns.GetHostName())[0];
  3. 跳到TLS 的區塊(如果是TLS 則執行...)裡面增加一個變數
    RealTimeServerTlsConnectionManager serverTlsConnectionManager;
  4. 刪除
    _connectionManager = (RealTimeServerConnectionManager)new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"

    換成
    serverTlsConnectionManager = new RealTimeServerTlsConnectionManager(憑證名稱, 憑證序號);"
  5. 在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);
    }
    }
  6. 接下來要把RegisterCallback 裡面的
    _connectionManager.StartListening(new IPEndPoint(IPAddress.Loopback, 0));
    刪掉或注掉吧
  7. 打完收工!


我們來看看之前問題出在哪?為什麼機器人不回應了。
我以為問題出在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 玩了吧! Tags: , ,

讀者回應 ( 4 意見 )

To Function,

還是你厲害,真的讓你解決了。佩服 佩服!
沒錯我既是chming又是vincent,我之前也有看到Interactive Bot的這一段為何要多用一個RealTimeConnectionManager,本來也想要跟著這樣做,不過還是先從其他方向去Try。這個問題可以解決,相信對開發bot的人有非常大的幫助,真是太感激你啦!

Chming

To Chming:
哈哈~~果然!! 不過其實我真的很不滿意老外回問題的速度,還是國人比較好XD
今天測過...機器人放三個小時都是沒有問題的!! 一起努力吧(把我在MSDN 上的回答按為解答吧:P)

谢谢,我的问题解决一点。在你博客里的那几篇文章很有用。

@linweifu
謝謝你的鼓勵喔!!我也是希望能幫助更多的人:)
另外,你MSN我也加你了,就像你說的,也希望能彼此交流(以文會友~哈)

張貼留言

如果沒有帳戶,建議使用「名稱/網址」留言喔^^