在接到wp7 mango sdk的通知後馬上著開發DYCOM For wp mango。畢竟這也已經是等了很久的事情。一直wp7 sdk就沒有開放socket通訊介面(包括s60的silverlight)。
經過兩分鐘的工作。順利把DYCOM for silverlight 4 成功移值到wp7.1。這充份表明了silverlihgt for wp7.1和silverlight 4有著很完美的一致性。起來來說網路通訊方面是。致於能不能夠支援wcf.net.tcp找個時間再測試下。
在接入正題前先和大家介紹一個DYCOM這個產品。也算是一個小廣告。不過不是營利目的的廣告。DYCOM是一個跨平台的網路通訊套件。它目前支援的用戶端已經有.net,wm5/6,wp7.1,android,flash,java和xna。重點是DYCOM決定走共用軟體的策略,DYCOM本身須然不開源,不過它提供了免費使用的使用政策。你可以通過使用DYCOM快速開發自己的跨平台通訊應用程式。如果你不想付費即可以到http://dy2com.com申請免費授權。它是終身免費的授權。而收費授權和免費授權是一樣的。換言之是否付費給DYCOMTeam Dev是出於你個人自願的原則。
接下來我會為大家演練如何通過DYCOM快速開發一個wp7.1的即時聊天應用程式。本程式分為兩個終端程式。伺服器端和用戶端程式.
a)伺服器端我們通過c#開始伺服器端商務邏輯並以一個控制台程式提供服務給用戶端串連和廣播訊息到所有用戶端。
b)用戶端是一個wp7.1應用程式。它是一個用戶端程式可以串連到伺服器
c)要現實的功能是:
1.由任意一個串連到伺服器端的wp7手機發送一條訊息到伺服器端。
2.伺服器端收到這條訊息後廣播到所有已經串連到伺服器的所有用戶端。
通過以上兩個功能需求我們可以完成一個簡單的即時文字交談程式。
以下是正常手動操作的演練過程:
1.登陸DYCOM官方網站申請免費授權,地址:http://bbs.dy2com.com/forum.php?mod=viewthread&tid=18&extra=
申請一個論壇帳號登陸後即可以通上以上地址串連瀏覽到申請DYCOM免費授權KEY的申請框:
填寫好你的使用者名稱和郵箱後點擊“申請密鑰”按鈕後DYCOM會發送一封包含DYCOM密鑰的郵件到你的郵箱。通過這個密鑰你就可以永久免費的使用DYCOM了。
2.下載DYCOM伺服器和wp7用戶端樣本工程檔案:
a)DYCOM伺服器樣本工程檔案:http://www.dy2com.com/a/DYcomxiazai/fuwuqiduanshili/2011/0120/59.html
以上是五個DYCOM樣本,我們只需要下載“dycom 伺服器端.net4.0樣本”即可。
b)DYCOM用戶端下載:http://www.dy2com.com/a/DYcomxiazai/kehuduanshili/2011/0121/66.html
用戶端我們只下載wp7即可:
要下載的東西到此已經完成.接下來開始調試運行這兩個樣本並讓它們可以相互連信:
小提示:如果你還沒有安裝wp7.1 sdk 請點擊下載並安裝:Windows phone 7.1 SDK :Direct Download Link
a)解壓兩個已下載檔案後我們得到兩個vs2010的項目工程檔案。那些我們分別用兩個vs2010程式開啟這兩個工程專案檔。
b)開始運行服務端:調試運行開啟了DYComServerVS10Sample工程的vs2010.運行後情況如下:
c)開始運行用戶端:調試運行開啟了DYComWPTestClient工程的vs2010.運行後情況如下:
小提示:如果這運行其間出現任何vs的錯誤提示我們可以先“重新編譯”一下整個用戶端工程.
^^運行成功後調試運行即完成。我們試著點擊輸入框輸入一些文字然後發送。正常情況下我們會收到我們自己發送的文本。而且你多幾好幾個用戶端的話同樣可以收到某一個用戶端發的訊息。至此。我們的調試運行已經成功了。接下來就是看看工程的原始碼了。
3.讓程式成為正式版呢:還記得我們剛剛申請的DYCOM產品金鑰吧。現在我們開啟服務端工程檔案DYComServerVS10Sample的DYComServer.cs檔案。
修改代碼:string key = "PD Key";//產品金鑰,請修改為您自己的產品金鑰
把以上這個key變數的內容改為你的DYCOM產品金鑰,
例如:string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";//產品金鑰,請修改為您自己的產品金鑰
這樣整個應用就已經成為正式的應用了,你可以部署到正式的伺服器上。而用戶端是不需要輸入DYCOM產品金鑰的。
通過以上的演練我們已經擁有了一個wp7的高速網路通訊原始碼工程了。接下來我們嘗試自己親手去為這個應用添加自己需要的功能了。通過接下來的演練你將能夠懂得怎樣利用DYCOM開發你自己的網路通訊應用。而這一切將會是無比的簡單。而且通訊效率是相當高的。你還可以用DYCOM開發wp7的網路遊戲喔。^^
4.添加使用者串連通知,需求:當某個新的用戶端串連到伺服器後,伺服器端發送一條通知給已經串連到伺服器端的其他用戶端。
a)伺服器端代碼編寫:我們只需要修改伺服器端的DYComServer.cs即可,
在DYComServer.cs的檔案內容開頭我們可以看到這樣一句代碼:
List<myClient> clients = new List<myClient>();
其實它就是所有已經串連到伺服器端的用戶端集合。那麼我們就可以著針對這個集合的調來實現我們的功能了。首先我們找到
//自訂訊息作業符
public enum op
{
login
}
這個enum定義。我們加上一個操作符。你可以隨意起個名字,還可以是中文的。修改後如下:
//自訂訊息作業符
public enum op
{
login,
有新使用者串連進入
}
然後我再在服務端的客戶OnConnetEvent裡添加我們的功能邏輯:
//使用者串連事件
void server_OnConnetEvent(DYSocket e, bool IsConneted)
{
//用戶端串連提示
Console.WriteLine(e.SocketArgs.AcceptSocket.RemoteEndPoint.ToString() + " 已接入");
//判斷串連用戶端是否新接入(新接入使用者UserToken是等於null的)
if (e.SocketArgs.UserToken == null)
{
//執行個體化
var mc = new myClient();
//把串連用戶端設定到用戶端執行個體
mc.Sock = e;
//希望使用者在一定時間內沒有任何通訊將其斷開(秒)
//mc.SetupTimeoutCheck(server, 5);
//操作完成,儲存客戶執行個體
e.SocketArgs.UserToken = mc;
//發送一個訊息給所有已串連到本服務的用戶端
//操作符是 op.有新使用者串連進入
//訊息內容是:"伺服器通知你,有新的使用者串連進入了系統"
//並使用UTF8編碼
server.SendToAll(clients, DYWriter.Merge(DYWriter.GetDYBytes((int)op.有新使用者串連進入),
DYWriter.GetDYBytes("伺服器通知你,有新的使用者串連進入了系統",Encoding.UTF8)));
//添加新用戶端到用戶端集合
clients.Add(e.SocketArgs.UserToken as myClient);
}
}
添加完以上的一句代碼後。
5.我們的伺服器端修改已經完成.接下來我們著手讓用戶端接收到訊息後顯示到使用者介面:
a)首先複製DYComServer.cs檔案裡的eumu op到用戶端並代替用戶端原有的eumu op。換言之我們把用戶端工程DYComWPTestClient中的MainPage.xaml.cs中的enum op改為:
//自訂訊息作業符
public enum op
{
login,
有新使用者串連進入
}
b)在再修改用戶端的Ondata事件,因為所有伺服器發送的訊息都會觸發這個事件。我們只要解釋訊息內容即可:
void ondata(byte[] data)
{
DYReader read = new DYReader(data);
int type;
if (!read.ReadInt32(out type))
{
return;
}
op opera = (op)type;
if (opera == op.login)
{
string date;
if (read.ReadString(out date, System.Text.Encoding.UTF8))
{
//listBox1.Items.Insert(0, DateTime.Now.Subtract(date).TotalMilliseconds.ToString());
lb_msgShow.Items.Insert(0, date);
}
}
//判斷是否新使用者連入操作符,由伺服器發送來的
else if (opera == op.有新使用者串連進入)
{
string str_服務端訊息內容;
//把訊息內容讀出到 str_服務端訊息內容 變數
if (read.ReadString(out str_服務端訊息內容, System.Text.Encoding.UTF8))
{
//在介面中的ListBox中顯示訊息內容
lb_msgShow.Items.Insert(0, str_服務端訊息內容);
}
}
}
至此我們的用戶端讀取和顯示功能也完成了。以下是最終運行後的結果,由於wp7模擬器多開很困難。所以我用另一個普通的silverlihgt用戶端串連到伺服器端:
結束語:經過這些演練後相信你已經對DYCOM有了比較概念的理解了。希望它能為你創造更多驚喜和價值。
本演練的源工程檔案下載:http://dl.dbank.com/c0wllqu9w7
作者:黎東海
網名:內Cool超人