假設使用者登入的位址是
rtmp://localhost/MyChatRoom/lobby/roomA
以下是事件按先後順序排列
程式開始
appStart:MyChatRoom
Start:
(在RED5啟動的時候會自動去啟動APP,進而觸發以上事件)
登入
roomStart:/lobby
Start:/lobby
roomStart:/lobby/roomA
Start:/lobby/roomA
appConnect:0
connect
appJoin:0:
roomConnect:0
connect:/lobby
roomJoin:0:/lobby
roomConnect:0
connect:/lobby/roomA
roomJoin:0:/lobby/roomA
第二個使用者登入
appConnect:1
connect
appJoin:1:
roomConnect:1
connect:/lobby
roomJoin:1:/lobby
roomConnect:1
connect:/lobby/roomA
roomJoin:1:/lobby/roomA
第二個使用者離開
roomDisconnect:1
disconnect:/lobby/roomA
roomLeave:1:/lobby/roomA
roomDisconnect:1
disconnect:/lobby
roomLeave:1:/lobby
appDisconnect:1
disconnect:
appLeave:1:
離開
roomDisconnect:0
disconnect:/lobby/roomA
roomLeave:0:/lobby/roomA
roomStop:/lobby/roomA
stop:/lobby/roomA
roomDisconnect:0
disconnect:/lobby
roomLeave:0:/lobby
roomStop:/lobby
stop:/lobby
appDisconnect
disconnect:
appLeave:0:
總結:
rtmp://localhost/MyChatRoom/lobby/roomA
GlobalScope(default) --> WebScope(MyChatRoom) --> Scope(lobby)
--> Scope(roomA)
進入時:
先從第一個Scope,lobby開始,
1,執行房間啟動ApplicationMBean.roomStart(IScope lobby)
2,執行啟動IScopeHandler.start(IScope lobby)
再開始到第二個Scope,roomA開始
3,執行房間啟動ApplicationMBean.roomStart(IScope roomA)
4,執行啟動IScopeHandler.start(IScope roomA)
5.然後開始執行ApplicationMBean.appConnect(IConnection conn,Object[] params)
6,執行IScopeHandler.connect(IConnection conn, IScope app, Object[] params)
7,然後執行ApplicationMBean.appJoin(IClient client, IScope app)
從第一個Scope,lobby開始,
8,然後執行ApplicationMBean.roomConnect(IConnection conn, Object[] params)
9,執行IScopeHandler.connect(IConnection conn, IScope lobby, Object[] params)
10,執行ApplicationMBean.roomJoin(IClient client, IScope lobby)
第二個Scope,roomA開始,
11,然後執行ApplicationMBean.roomConnect(IConnection conn, Object[] params)
12,執行IScopeHandler.connect(IConnection conn, IScope roomA, Object[] params)
13,執行ApplicationMBean.roomJoin(IClient client, IScope roomA)
當第二個使用者進入同一房間時,房間不用重建立立,故從步驟5開始執行
當第二個使用者離開時
從最外層的Scope(roomA)開始
1,執行ApplicationMBean.roomDisconnect(IConnection conn)
2,執行IScopeHandler.disconnect(IConnection conn, IScope roomA)
3,執行ApplicationMBean.roomLeave(IClient client, IScope roomA)
再到Scope(lobby)
4,執行ApplicationMBean.roomDisconnect(IConnection conn)
5,執行IScopeHandler.disconnect(IConnection conn, IScope lobby)
6,執行ApplicationMBean.roomLeave(IClient client, IScope lobby)
再是WebScope(MyChatRoom)
7,執行ApplicationMBean.appDisconnect(IConnection conn)
8,執行IScopeHandler.disconnect(IConnection conn, IScope app)
9,執行ApplicationMBean.appLeave(IClient client, IScope app)
當第一個,也是最後一個使用者也離開的時候.情況相似.
隻不過在roomLeave之後,會接着關閉這個房間
先調用ApplicationMBean.roomStop(IScope room)
再調用IScopeHandler.stop(IScope roomScope)
app不會因為所有客戶都不在而自動關閉.