[訊息論壇] ICE Messaging Forum
塗能宇 / 郭漢丞
<實作篇> 在 VB 上利用 iPush® 開發 Internet 即時訊息工具 (上)
提到 VB,我想很多人的第一印象都是簡單好用,只要有適當的 ActiveX 元件,畫面拉一拉,程式的雛型就幾乎完成了。所以身為主筆群一員的我,拿到這個題目時,心中正在偷笑。因為利用
iPush® 的 ActiveX 元件 (xiPush2.ocx),只需要撰寫 11
行程式,就可以完成即時訊息收送客戶端軟體。
不相信嗎?帶您看看是哪 11 行。
就是下面這 11 行!
REM =======連線資料輸入
XiPush21.ipuship = AddrText.Text
XiPush21.ipushport = PortText.Text
XiPush21.company = CompanyText.Text
XiPush21.product = ProductText.Text
XiPush21.username = UsernameText.Text
XiPush21.password = PasswdText.Text
REM=======執行連線指令
Dim rtn as long
rtn = XiPush21.ipushTCPConnect
REM=======傳輸資料
Dim d As Variant
d = textData.Text
XiPush21.ipushSendNPSubjectData textSubject.Text, d,
1, 0
看起來很簡單吧。真的只需要 11 行嗎?不信請看圖一:
|
圖一、點按
[Command1] 鈕時,OnClick 事件執行的程式碼 |
|
| 圖二、執行發送作業圖例
(User a) |
|
圖三、本期所附的客戶端範例中,User
b 收到 User a 送過來的資料 |
細心的讀者一定發覺圖一畫面中其實只有 9 行程式,因為我順手一打沒有宣告變數就直接使用的壞習慣,讓程式又少了兩行。所以......
我對不起大家,我錯了。
利用 iPush® 的 ActiveX 元件,不嚴謹的,只需要 9 行程式碼,就可以透過
Internet 傳送即時訊息了。
整個傳送資料的客戶端程式的流程如下:
若要能接收資訊,則需要多加一項回呼 (Callback) 函式在表單中,讓 iPush®
的 OCX 元件能夠在連線訂閱後,將接收到的訊息回傳給 VB 程式。
在範例裡,我們會將接收到的資訊顯示在 Label 標籤中。我們稍後會再詳細說明 iPush®
回呼的方式。
在 iPush® V2 中,資料傳送又多了保證送達 (Guaranteed Message
Delivery) 的功能,但使用方式和前面的敘述是一樣的,甚至只要修改一下,一行都不用多加,就可以實作出來。我們稍後會一一說明如何使用勇猛的
iPush® ActiveX OCX 元件來達成這些功能。
上面這段程式碼,並沒有任何錯誤處理的機制,只是用來展示 iPush® 強大而且方便的程式設計方式,真正的範例程式當然不會這麼隨便。
我們將會從這幾行程式開始,做一些修整,變成本期所附的完整範例程式。我們在可供下載的 zip 檔中,除了一個完整的客戶端範例程式外,還附上了一個空白表單與包含所有程式的
txt 檔。您只需要依著操作步驟,就可以順利地完成所有練習。
在我們進行實作說明以前,請先確認您具備以下條件,然後再一步步實作下去:
條件不難吧?如果您沒有 iPush® Server V2 或 iPush®
ActiveX API,不妨直接點選以上連結,下載最新版本。
檢查完電腦系統的需求之後,還有一項準備工作,請在 iPush® Server V2
BackOffice 裡面新增以下的 Service 與 User 帳號。
新增一個 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, *
訊息收發者 b:
Group:ice
Product:ipush
User ID:b
Password:b
Read Permission:0x00-0xff, *
Write Permission:0x00-0xff, *
|
圖六、User
a 帳戶詳細資料,User b 類同 |
第一步,先註冊下載解壓縮後的 XiPush2.ocx,在檔案所在目錄下執行 regsvr32 XiPush2.ocx
以註冊該元件。
|
圖七、[開始]
→ [執行],執行元件註冊作業 |
|
圖八、註冊成功訊息 |
接下來我們先測試一下範例執行檔是否可在您的環境中正常運作。
開啟執行兩次下載檔案中所附的 vbsample.exe,一個做為訊息傳送者,另一個做為訊息接收者,測試兩者是否可以正常送收訊息。
|
圖九、連線操作
- 訊息傳送者畫面 |
|
圖十、連線操作
- 訊息接收者畫面 |
如圖十,在要做為接收者的第二個 vbsample.exe 執行畫面中進行如下操作:
1. 輸入連線資料
(如圖十)
2. 按下 [TCP Connect] 鈕
3. 在 Channel 文字欄輸入要訂閱的 ABCD
4. 按下 [Subscribe Channel] 鈕
如圖九,在要做為傳送者的第一個 vbsample.exe 執行畫面中進行如下操作:
1. 輸入連線資料
(如圖九)
2. 按下 [TCP Connect] 鈕
3. 在 data 文字欄位中輸入 This is a Channel Test
4. 按下 [Send Channel] 鈕
如圖十,此時應該可以看到收到的 Channel ABCD 訊息:This
is a Channel Test 了。
若您的操作結果不是這樣,則請檢查網路連線是否正常,以及帳戶的設定是否正確。
接下來我們開啟 Visual Basic,開始進入設計階段。
在完整表單設計練習中,我們主要在練習傳送 iPush® 的三種訊息類型:Channel、Non-persistent
Subject、Persistent Subject。
這三種訊息有什麼差異呢?
-
Channel : 提供了頻道 0x00
到 0xff,可供使用者定址使用。
-
Non-persistent Subject:訊息傳送時,傳送與接收不做回應
(ACK) 動作。
-
Persistence Subject:配合 Durable
Subscription,可以做到訊息保證送達的功能。
關於詳細的規格特性,可以參考 iPush® V2 產品 What's
New 的說明。
每一種資料傳輸方式,都必須實作三項功能,分別是:
-
傳送資料 (Publish)
-
訂閱資料 (Subscribe)
-
取消訂閱 (Un-Subscribe)
以下我們分別就 Channel、Non-persistent Subject、Persistent Subject,介紹如何撰寫相關的傳送及訂閱程式。
我們在表單中,使用了如圖十一右下角的 XiPush2 控制項:
若這個控制項不存在,請在 Visual Basic 中,選擇 [專案] 功能表中的 [設定使用元件] ,請勾選其中的
[xiPush2 ActiveX Control module] 項目:
|
圖十二、勾選
iPush OCX - [xiPush2 ActiveX Control module] 項目 |
|
圖十三、然後就可以在畫面的元件工具列中,看到
XiPush2 的圖示 |
接下來,將這個控制項拖曳到表單中,完成引用 iPush® ActiveX 元件的工作,如圖十三所示。
TextBox 名稱 / 功能分別為:
Label 標籤名稱 / 功能分別為:
-
Label1:顯示連線狀態,供 iPush®
ActiveX 元件 Callback 使用
-
Label2:Channel 標籤
-
Label3:Subject 標籤
-
Label4:接收到 Channel 資料的 Channel
名稱,供 iPush® ActiveX 元件 Callback 使用
-
Label5:接收到 Channel 資料的內容,供
iPush® ActiveX 元件 Callback 使用
-
Label6:Data 標籤
-
Label7:接收到 Subject 資料的 Subject
名稱,供 iPush® ActiveX 元件 Callback 使用
-
Label8:接收到 Subject 資料的 Durable
名稱,供 iPush® ActiveX 元件 Callback 使用
-
Label9:接收到 Subject 資料的內容,供
iPush® ActiveX 元件 Callback 使用
Command 命令按鈕 / 功能分別為:
-
Command1:顯示名稱 (Name) 為 TCP
Connect;按下時執行 TCP 連線工作
-
Command2:顯示名稱 (Name) 為 Disconnect;按下時切斷連線
-
Command3:顯示名稱 (Name) 為 Subscribe
Channel;訂閱指定 Channel
-
Command4:顯示名稱 (Name) 為 Subscribe
Subject;Non-durable 訂閱指定 Subject
-
Command5:顯示名稱 (Name) 為 Send
Channel Data;傳送 Channel 資料
-
Command6:顯示名稱 (Name) 為 Send
Subject Data;傳送 Non-persistent Subject 資料
-
Command7:顯示名稱 (Name) 為 Subscribe
Durable Subject;Durable 訂閱指定的 Subject
-
Command8:顯示名稱 (Name) 為 Send
Persistence Subject;傳送 Persistent Subject 資料
-
Command9:顯示名稱 (Name) 為 Unsubscribe
Subject;取消 Non-durable 訂閱 Subject
-
Command10:顯示名稱 (Name) 為 Unsubscribe
Durable Subject;取消 Durable 訂閱 Subject
我們已經先建立好一個空白的表單,及相對的程式碼文字檔。若您懶得打字,接下來您只要將對應的程式碼,複製到表單及對應的程式事件中,就可以完成這個
VB 範例的練習。
寫到這邊,已經佔去不少篇幅,我想本週我們暫時實作到此,「在 VB 上利用 iPush®
開發 Internet 即時訊息工具 (下)」當中,我們將繼續完成處理連線及斷線、傳送 Channel 訊息、傳送
Non-persistent 訊息、傳送 Persistent 訊息、Non-durable 訂閱、Durable
訂閱等功能。
您將發現,透過 VB 來實作 iPush® 即時訊息應用,真是一點都不費事。我們下週再見。
|