一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WM有約II(六):分級限制

等級制度

  在上一集里,我們把發送查詢短信息的人分為"聯系人"和"陌生人"兩大類,應用程序會自動回復"聯系人",忽略"陌生人",在這一集里,我們將會引入另外兩種類型:"白名單"和"黑名單"。如果你看過上一集,你應該知道"聯系人"和"陌生人"是互斥的,它們之間的區別是手機號碼是否存在聯系人里。"白名單"和"黑名單"是在"聯系人"上發展出來的兩個細分類型,它們也是互斥的,"白名單"允許執行所有查詢,而"黑名單"則禁止執行所有查詢。至于"陌生人",我們將會給它一個"注冊"的機會,讓它可以請求把自己加到聯系人里。這四個等級將會通過AccessLevel枚舉來表達:

代碼 1

  在這一集里,我們將會在這個"等級制度"的基礎上實現如下效果:

訪問級別

允許執行的操作

Whitelist

PingStatus、PingSchedule

Contact

PingStatus

Stranger

SignUp

Blacklist

N/A

如何界定訪問級別?

  首先,發送方要么在聯系人里,要么不在,如果不在,那么他/她的訪問級別就是Stranger,如果在,我們還要看看他/她是否在白名單或者黑名單里,如果也在,那么他/她的訪問級別就是Whitelist或者Blacklist,否則就是Contact。就實現方式而言,我們應該優先考慮檢查白名單和黑名單,因為從集合的角度來看,它們均是聯系人的子集,如果發送方在任一名單里,我們就可以立即返回他/她的訪問級別,而不必遍歷所有聯系人,于是,我們可以這樣獲取發送方的訪問級別:

代碼 4

  那么,查詢操作的訪問級別又如何獲取呢?我們知道,應用程序(目前)只支持三種查詢操作,每種操作所需的最低訪問級別如下表所示:

查詢操作

所需的最低訪問級別

PingStatus

Contact

PingSchedule

Whitelist

SignUp

Stranger*

請把我加為好友……

  下面,我們將會實現SignUp操作。首先,我們要定義這個操作的短信息,很明顯,它包含的數據將用于創建Outlook聯系人,最低限度應該提供姓名和手機號碼:

{Trombone:SignUp(Leehom,Wang,13813572468)}

  用戶界面也需要做出相應調整:

圖 11

  這個用戶界面僅向用戶收集姓名,那么,我們如何獲取本機的號碼?你可以通過P/Invoke調用SmsGetPhoneNumber函數,也可以像我這樣,使用OpenNETCF的Smart Device Framework。下載、安裝Smart Device Framework 2.3,添加對OpenNETCF.Phone.dll的引用,接著就是修改Ping按鈕的代碼了(原本的代碼參見《WM有約II(四):你明天有空嗎?》的代碼14):

代碼 7

  好了,運行一下看看效果:

圖 12

  再來看看Cellular Emulator,很好,注冊短信息順利發出了:

圖 13

  接下來就是注冊短信息的處理了,因為它只針對陌生人,而且無需自動回復,所以我們不必遵守SmsProcessorBase類的套路,直接讓SignUpProcessor類實現ISmsProcessor接口就可以了。在實現SignUpProcessor.Process方法之前,我們需要一個輔助方法來提取注冊短信息里的數據:

代碼 8

  因為注冊短信息的處理需要用戶的參與,用戶有權決定把發送方添加到聯系人還是忽略他/她,所以應用程序應該把截獲的注冊短信息添加到某個隊列里,以便用戶過后查詢和處理,避免用戶在應用程序截獲注冊短信息時不得不馬上處理的尷尬情景。為此,我們需要一個RegistrationQueue來暫存待處理的注冊請求,由于每個注冊請求都包含了接收時間、姓名和手機號碼,于是我們用一個Registration類來存放這些數據:

代碼 9

  由于這些數據有可能跨越多個應用程序會話,于是我們需要把它們持久化到文件里,這里我還是選擇使用XML:

代碼 10

  因為RegistrationQueue的實現和InterceptionHistory(參見《WM有約II(五):區別對待不同的手機號碼》)相似,所以我就不在這里一一細說了。

  回到SignUpProcessor.Process方法,在截獲注冊短信息時,我們需要判斷發送方是否陌生人,若是,把相關數據添加到RegistrationQueue,否則,忽略該注冊短信息。另外,我們還需要在InterceptionHistory里等級本次截獲:

代碼 11

  最后,我們需要為此配備一個用戶界面:

圖 14

  當應用程序啟動時,我們要把RegistrationQueue綁定到上面的DataGrid:

代碼 12

  當DataGrid上選中的行發生改變時,下面的兩個TextBox的內容要更新為當前選中行的姓名:

代碼 13

  當用戶單擊Add按鈕時,應用程序將會用當前選中的注冊信息來創建Outlook聯系人,創建完畢后將會把注冊信息從RegistrationQueue里刪除:

代碼 14

  而當用戶單擊Remove按鈕時,應用程序將會直接把當前選中的注冊信息從RegistrationQueue里刪除。

好了,又到了測試的時候了(在測試之前,別忘了把SignUpProcessor掛接到InterceptorManager里!),通過Cellular Emulator發送如下注冊短信息:

{Trombone:SignUp(Leehom,Wang,13813572468)}

圖 15

現在,我們把注意力集中到模擬器上:

圖 16

從上圖可以看到,注冊短信息已被成功截獲,單擊Add按鈕,應用程序將會用選中的注冊信息創建Outlook聯系人:

圖 17

此時,如果我們通過Cellular Emulator使用剛才的手機號碼發送如下查詢短信息:

{Trombone:PingStatus}

將會收到應用程序的自動回復:

圖 18

而主界面上的截獲歷史也能正確顯示發送方的姓名了:

圖 19

你還想要什么?

  有一次,我和一個六年級的學生一起看動畫片,當我們看到正義的代表向怪獸發動反擊時,我問他:"你現在看到這種情節還會覺得體內有一股激動在奔流嗎?"他說沒有。曾幾何時,當我們碰到可以使用新技術的機會時,我們也會異常激動……

  或許,在很多人的眼里,技術只不過是用來解決問題的工具罷了,然而,我更傾向于通過學習/使用技術尋找樂趣。下一集,要不我們試一下db4o吧,然后,再試一下Windows Mobile上的Notification,就是當你收到短信息時屏幕下面彈出的提示框……

NET技術WM有約II(六):分級限制,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 中文字幕视频网 | 五月天综合激情网 | 好吊操精品视频 | 97人人模人人揉人人捏 | 国产精品第7页 | 一本三道a无线码一区v小说 | 日本一区二区三区四区五区 | 一区二区三区视频 | 麻豆国产精品免费视频 | 一区二区三区四区在线不卡高清 | 91视频视频| 伊人网狠狠干 | 91短视频版在线观看免费 | 久久久这里只有精品加勒比 | 国内精品久久久久久影院8f | 人人洗澡人人洗澡人人 | 中文字幕一区二区三区免费视频 | 国产在线观看中文字幕 | 91欧美精品综合在线观看 | 大伊人青草狠狠久久 | 主播avove | 国产床戏无遮挡免费观看网站 | 九九精品视频在线 | 韩国一区二区三区 | 一本之道一区三区 | 亚洲人成绝费网站色ww | 成人欧美在线观看 | 四虎精品永久在线 | 看毛片视频 | 天天做天天爱夜夜大爽完整 | 一区视频在线播放 | 国产婷婷综合在线视频 | 日韩精品视频在线 | 中文字幕在线精品 | 五月婷婷亚洲综合 | 91国内外精品自在线播放 | 91精品国产综合久久消防器材 | 婷婷成人亚洲 | 精品成人免费播放国产片 | 亚洲图片另类图片 | 欧美成人亚洲欧美成人 |