• 沒有找到結果。

Service

fireServiceEvent()

WhiteBoardService whiteBoardWindow

processRequest() processResponse()

WhiteBoardWindow

connect() disconnect()

has

board

receiveHandler[]

Canvas graphics

addOutputStream() paint()

ReceiveHandler run()

功能描述如下:

WhiteBoardService:

主要是負責電子白板建立及關閉的協定處理。

WhiteBoardWindow:

負責使用者視窗界面,產生管理ReceiveHandler,產生 管理資料管線及視窗事件聆聽。

ReceiveHandler:

開啟繪圖資料聆聽埠,加以聆聽,並剖析資料使成有意 義的繪圖資訊。

Canvas:

此類別與java.awt.Canvas並無相關,負責聆聽滑鼠事件及繪 圖。

4.7.2 建立,運作及關閉

(1) 建立

首先由某同一視訊會議參與者啟動電子白板,該參與者 的WhiteBoardService將對其它參與者建立輸入管線並 送出CREATE Request,如下圖。

圖 4.7.2.1 建立電子白板

CREATE Request CREATE Request

CREATE Request

A B

C D

視訊會議

其它參與者收到CREATE Request後,利用請求內的參數建立 與參與者A的輸出管線,建立與A的輸入管線並將管線參數加入回 應OK內,然後開始向除了A以外的參與者發出INVITE Request,

如下圖。

圖 4.7.2.2 建立電子白板

上圖只畫出某一參與者的情況,其它參與者(B、D)雷同,在 送出INVITE Request前,先對該INVITE Request的接受者建立輸 入管線,同樣的,將管線參數加入請求中,由於每位參與者皆如此 做,最後網狀的管線分佈圖將被建立起來,如下圖。

圖 4.7.2.3 電子白板網狀管線分佈圖 INVITE INVITE

OK 0x04

A B

C D

視訊會議

A B

C D

視訊會議

使用網狀分佈的好處是資料的傳送速率較集中管理再行轉傳 drawLine()

mouseDragged()

:Canvas :Graphics2D

:OutputStream

使用者拖曳每一像素都會將上面的流程會執行一次,也就是說 在正常的使用下,可能一秒內就執行七八十次,這也是整個電子白 板系統中,較為困難的部份,如何避免上一次流程尚未完成就進行 下一次流程而造成資料封包的重疊,因此,必須淢少以上流程的時 間,不能使用昂貴的運作,所以電子白板使用陣列儲存資料輸出串 流,能預先載入的動作及資料即預先載入,使用bit shift運算代替 乘法等,否則即使有Java語言的同步化保護,也會造成延遲導至使 用上的不順暢。

圖 4.7.2.5 遠端繪圖 (3) 關閉

電子白板的關閉由視訊會議中的某一參與者發啟,送出BYE Request至每一參與者,當電子白板系統收到BYE Request即關閉 視窗界面及資料串流,然後回應BYE Response,以下是遠端關閉 的UML順序圖。

notify() drawLine()

processRequest()

onRemoteClose()

sendReponse() close()

:Canvas :ReceiveHandler :InputStream

:WhiteBoardService :WhiteBoardWindow :InputPipe

4.7.3 討論

電子白板未來可能改進之處有:

(1) 不依賴視訊會議系統,任兩使用者可隨時建立電子白板會 議。

(2) 任一參與者關閉電子白板,其參與者的電子白板也不需一 併關閉,改為其它方式告知某參與者己關閉電子白板,最後剩 一位參與者使用電子白板時才被迫關閉。

(3)在電子白板開啟後,新加入的參與者無法參與電子白板會 議。

相關文件