天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

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

主站蜘蛛池模板: 精品免费久久久久久影院 | 无码专区无码专区视频网网址 | 亚洲精品成人A8198A片漫画 | 蜜柚在线观看免费高清官网视频 | av淘宝 在线观看 | 语文老师扒开胸罩喂我奶 | 成人无码精品一区二区在线观看 | 亚洲熟妇色自偷自拍另类 | 国产成人综合在线视频 | 精品一区二区三区四区五区六区 | 久久怡红院国产精品 | 欧美性极品黑人hd | 父皇轻点插好疼H限 | 老师扒开尿口男生摸尿口 | 欧美6O老妪与小伙交 | 一个人HD在线观看免费高清视频 | 麻豆精品传媒卡一卡二传媒短视频 | 国产又粗又猛又爽黄老大爷 | 欲香欲色天天天综合和网 | 国产高清-国产av | 中文无码在线观 | 俄罗斯人与动ZOOZ | 国内精品久久久久影院老司 | SM高H黄暴NP辣H调教性奴 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 影音先锋男人av橹橹色 | 午夜电影三级还珠格格 | 寂寞夜晚看免费视频 | 2021精品国产综合久久 | 高清国产免费观看视频在线 | 成年免费大片黄在线观看岛国 | 嫩草亚洲国产精品 | xxx军人3p大gay | 日韩精品熟女一区二区三区中文 | 妞干网手机免费视频 | www色小姐 | 国内精品一级毛片免费看 | 美女露出撒尿的部位 | 美女教师朝桐光在线播放 | 手机在线观看你懂的 | 午夜国产精品影院在线观看 |