一区二区久久-一区二区三区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(六):分級限制,轉載需保留來源!

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

主站蜘蛛池模板: 免费一级做a爰片性色毛片 免费一看一级毛片人 | 黄网站在线播放 | 日本一区二区在线不卡 | 久久国产乱子伦精品免 | 五月天亚洲综合 | 欧美亚洲激情视频 | 国产精品极品美女自在线观看免费 | 欧美在线看欧美高清视频免费 | 午夜国产福利在线观看 | 麻豆出品 | 色涩在线 | 免费黄色视屏网站 | 欧美九九视频 | 日韩免费视频播放 | 国产一区视频在线免费观看 | 亚洲欧美7777 | 精品视频免费看 | 91大西瓜国产线观看免费 | 亚洲精品午夜级久久久久 | 91在线入口| 婷婷涩五月 | 亚洲图片欧美文学小说激情 | 91麻豆精品一二三区在线 | 一级毛片成人免费看免费不卡 | 久久久最新精品 | 国产91精品福利在线观看 | 9299yy看片淫黄大片在线 | 国产视频二 | 亚洲酒色1314狠狠做 | 99视频这里有精品 | 精品久久中文网址 | 成年色黄大色黄大片 视频 成年视频xxxxxx在线 | 婷婷久久精品 | 色播视频在线观看 | 99久久中文字幕伊人 | 中国欧美日韩一区二区三区 | 亚洲精品视频区 | dxj在线视频·男人的天堂网站 | 成人激情在线 | 精品国产一区二区三区在线 | 久久2017|