[訊息論壇] ICE Messaging Forum
塗能宇 / 郭漢丞
<實作篇> 在 HTML 上利用 iPush®
開發 Internet 即時訊息工具
不用安裝任何軟體,走到哪裡都可以用的 Web Mail 系統,我想不少人都使用過。不論在世界的哪一個角落,只要能使用瀏覽器,就可以收發電子郵件。雖然一般的電子郵件應用程式更完整,但是方便的
Web Mail 還是不少人收信的第一選擇。
同樣的道理,若是能利用 HTML 完成即時訊息的收發,那該有多方便啊。
讓需要的即時資訊無所不在、無所不到,是 iPush® 的目標,透過 iPush®
提供的多樣 API,其實要運用 HTML 建構即時訊息應用一點都不難。
接下來我們將示範如何透過瀏覽器,來處理收、送即時資訊。並簡單介紹 iPush®
V2 中新的 Queuing 特性以及應用方式。
在這個練習中,建議使用 FrontPage 或是 Dreamweaver 等網頁編輯軟體,因為這些網頁編輯工具都提供了方便的元件,可在網頁中快速製作表單及加入
ActiveX 控制項的工作。
若您對熟悉 Visual Basic,當然也可以直接建立 Visual Basic 的 DHTML 網頁專案。不過,不論使用哪一種工具,都可以透過
iPush® V2 提供的強大功能,經由簡單的敘述,完成資訊的收發工作。
本期內容將直接切入到如何在網頁中,加入收送訊息的基本功能。關於客戶端的權限設定部份,和前兩期 Visual Basic
的實作課程式完全一樣。
若您已經實作過前兩期的課程,可以跳過使用者設定以及登錄 OCX 部分的內容,直接進入主題。
當然,我們也如同以往,附上本期的完整範例網頁。在可供下載的 zip 檔案中,包括本期實作篇示範的 Subject
範例程式外,還附上了包含所有程式碼的 txt 檔。您只需要依著操作步驟,就可以順利地完成所有練習。
在我們進行實作說明以前,請先確認您具備以下條件,然後再一步步實作下去:
條件不難吧?如果您沒有 iPush® Server V2 或 iPush®
ActiveX API,不妨直接點選以上連結,下載最新版本。
檢查完電腦系統的需求之後,還有一項準備工作,請在 iPush® Server V2
BackOffice 裡面新增以下的 Service 與 User 帳號。
首先,請在 BackOffice 中建立使用者所需的相關帳號資訊。
<新增一個 Service>
Group:ice
Product:ipush
Expiration Date:0000-00-00 (表示永久有效)
Limited Connections:10
|
圖一、在
BackOffice - Service Management 中新增一個 Service - Group:
ice ; Product: ipush |
<新增兩個 User 帳號 a 與 b>
訊息收發者 a:
Group:ice
Product:ipush
User ID:a
Password:a
Read Permission:0x00-0xff, *
Write Permission:0x00-0xff, *
Concurrent Use:10
訊息收發者 b:
Group:ice
Product:ipush
User ID:b
Password:b
Read Permission:0x00-0xff, *
Write Permission:0x00-0xff, *
Concurrent Use:10
|
圖二、User
a 帳戶詳細資料,User b 類同 |
首先,先註冊下載解壓縮後的 XiPush2.ocx,在檔案所在目錄下執行下列命令, 以註冊該元件:
regsvr32 <file path>\XiPush2.ocx
|
圖三、[開始]
→ [執行],執行元件註冊作業 |
|
圖四、註冊成功訊息 |
以 Subject Sample (ipush2_subject_sample.htm) 為例,必須建立如下圖的表單,表單的名稱為
iptf:
我們主要用到四種形式 (Type) 的控制項,分別是:
控制項相關的屬性看起來像這樣子:
<input TYPE="BUTTON" VALUE="TCPConnect"
NAME="btnTCPConnect">
代表的意義是在螢幕上顯示的樣式是按鈕“Button”,顯示在按鈕上的名稱是“TCPConnect”,在 VBScript
中操作的名稱是“btnTCPConnect”。
有一些項面後面還有 DISABLED 參數,代表目前這些按鈕是不可使用的狀態。只有在完成某些特定的動作之後,才可以使用。
表單的相關詳細設定內容,請參考本期所附範例網頁的內容。在表單完成後,請在表單上按下滑鼠右鍵,確認這個表單的名稱是
iptf。
表單完成後,接下來就是加入能讓平凡的網頁,變成擁有即時訊息收送能力的秘方 ── iPush®
ActiveX 控制項。
您可以採取手動的方式,在網頁中加入如下圖的 <object> 標籤,以及物件的 CLASSID 識別碼。
|
圖七、利用
<object> 標籤將 ActiveX 控制項加到網頁的表單中 |
或是利用網頁編輯工具中提供的功能,將物件插入到網頁中。以 FrontPage 為例,請選擇 [插入] ->
[Web 元件]:
|
圖八、直接由
FrontPage 功能表選單加入元件 |
接下來選擇插入元件類型 [進階控制項] 中的 [ActiveX 控制項]:
選擇完成後,按 [下一步],將選單捲動到最下方,選取 [XiPush2.ocx Control] 此一控制項。
若是沒有 XiPush2.ocx 這個控制項,請按下 [自訂] 鈕,手動將這個控制項加入到清單中以供選擇:
|
圖十、加入控制項後按
[完成] 鈕,若是沒有這個 XiPush2.ocx 控制項,按 [自訂] 鈕。 |
|
圖十一、按
[自訂] 鈕後,將 [XiPush2.ocx Control] 前方的核選方塊打勾後,加入控制項。 |
然後我們就可以在表單中,看到 ICE 小藍冰人的 ActiveX 控制項圖示。在圖示上按下滑鼠右鍵,就可以直接將這個
ActiveX 元件相關的 參數,設成所需的資訊內容:
|
圖十二、
在圖示上按滑鼠右鍵,選
[ActiveX 控制項內容] |
|
圖十三、可直接設定相關的
連線所需資訊 |
接下來,我們需要加入與表單按鈕對應的 VBScript。
相關的內容以及 iPush® 接收訊息時的 Callback 函式,可以參考上一期電子報的內容說明,以得到相關的
資訊。
在這邊,我們一樣將整個即時訊息交換過程分成三個部分,分別是:
關於連線部分,iPush® V2 提供了 TCP 與 UDP 兩種不同的連線方式。
以 TCP 連線來說,以下的 VBScrip 程式碼,可以直接鍵入網頁 HTML 碼中,介於 <body>
與 </body> 標籤之間任一處即可。
<TCP 連線所需提供的資料及 VBScript 程式碼>
<SCRIPT LANGUAGE="VBScript">
Sub btnTCPConnect_OnClick
Set tF = Document.forms("iptf")
ipushx.ipuship = tF.in_ipuship.Value
ipushx.ipushport = tF.in_ipushport.Value
ipushx.company = tF.in_company.Value
ipushx.product = tF.in_product.Value
ipushx.username = tF.in_username.Value
ipushx.password = tF.in_password.Value
res = ipushx.ipushTCPConnect
If (res > 0) Then
tF.areaBoard.Value = "connect ready"
tF.btnTCPConnect.Disabled = true
tF.btnUDPConnect.Disabled = true
tF.btnDisconnect.Disabled = false
tF.btnSub.Disabled = false
tF.btnUnsub.Disabled = false
tF.btnUnsubDurable.Disabled = false
tF.btnSendT.Disabled = false
tF.btnSendQ.Disabled = false
Else
tF.areaBoard.Value = "connect fail: "
& res
End If
End Sub
</SCRIPT>
|
Set tF 敘述,是將 iptf 表單的名稱代號設為 tF,後面接著就是原先表單中的物件名稱,以及物件的值。以第三行敘述來說,
ipushx.ipuship = tF.in_ipuship.Value
就是將 tF 表單上的 in_ipuship.Value 的值,設定給物件代號為 ipushx 的 ipuship
屬性。當 ipushx.ipushTCPConnect 連線成功時,res 會傳回一個大於 0 的值;接著會將相關的按鈕切換顯示連線中的狀態。
接下來的 UDP 連線與斷線的處理,和 TCP 連線處理方式相似。分別呼叫的是建立UDP 連線使用的 ipushx.ipushUDPConnect
以及斷線使用的 ipushx.ipushDisconnect。
訂閱 Subject 的部分,需要分成兩個部分處理。分別是訂閱 Subject,以及供 Subject 訊息接收的
Callback 函式處理。
訂閱還分為一般訂閱 (Non-durable) 和 Durable 訂閱,詳細的 Subject 訂閱作業處理如下:
<SCRIPT LANGUAGE="VBScript">
Sub btnSub_OnClick
Set tF = Document.forms("iptf")
A = tF.in_subject.Value
B = tF.in_durname.Value
If (B = "") Then
ipushx.ipushSubSubject(A)
Else
ipushx.ipushSubDSubject A, B
End If
End Sub
</SCRIPT>
|
而 Subject 訊息接收的 Callback 函式,我們在這邊提供兩個,一個是供接收系統回傳狀態的 CommandMsg,另一個則是
即時訊息接收的 SetSubjectData。
<SCRIPT LANGUAGE="VBScript">
Sub ipushx_CommandMsg(nCode,
strMsg)
Set tF = Document.forms("iptf")
tF.areaBoard.Value = "Command Message: "
& nCode & ", " & strMsg
window.status = "Command Message: " &
nCode & ", " & strMsg
End Sub
Sub ipushx_SetSubjectData(subj, durname, data, cid,
msgid)
B = ipushx.ipushVar2Str(data)
Set tF = Document.forms("iptf")
tF.areaBoard.Value = "receive : " &
subj & ", " & durname & ",
" & B & ", " & cid &
", " & msgid
window.status = "receive : " & subj
& ", " & B
End Sub
</SCRIPT>
|
關於 Callback 函式的說明與相關的參數功能,請參考前面 4 期電子報或 ICE Developer Center
中的 ActiveX API Programming Guide。
接收端處理完後,接下來就是處理傳送的方式。
在 iPush® V2 中,除了前面兩期 VB 的 Pub/Sub 訊息傳遞模式之外,還可以再加上另外一種
傳送 Subject 訊息的模式,稱為 Queue。
被傳送者指定為 Queue 的訊息,會傳送給單一的接收者處理,如線上購物的訂單接收處理即是這樣的應用例子。
比如,公司有一個訂單處理 (order processing) 部門,有多位業務人員在接訂單,但一張訂單只需一位業務人員處理,不需要每位業務人員都收到每一份訂單。
這種特性可以將需要分散、派遣等分散式處理的工作大幅簡化,系統會自動分派 Queue 訊息到目前連線的客戶端,大幅增加系統處理的效能。
<SCRIPT LANGUAGE="VBScript">
Sub btnSendQ_OnClick
Set tF = Document.forms("iptf")
A = tF.in_subject.Value
B = tF.in_message.Value
If (tF.ckPersistent.Checked) Then
ipushx.ipushSendPQueueData A, B, 1, 0, 0, 0, 0,
0
Else
ipushx.ipushSendNPQueueData A, B, 1, 0
End If
window.status = "send queue: " & A
& ", " & B
End Sub
</SCRIPT>
|
iPush® V2 同時提供了 Pub/Sub 一對多與 Queue (P2P)
一對一這兩種的傳送訊息 模式與功能,目的都在幫助使用者能夠透過簡單的程式介面,在最短的時間內,設計建構出有效、穩定、而且安全的訊息傳遞系統。
我們的 iPush® V2 技術與實作系列文章,在本期將告一段落。期望透過我們
Step-by-step 的導引方式,可以讓您以最短的時間,了解並實作出您自己的即時訊息應用。
|