使用Silverlight4与Wcf4的Net.tcp实现的共享白板

这篇文章与“使用Silverlight4与Wcf4的Net.tcp实现的简单聊天室”是一起的,同一个demo只不过我又多加了一个共享白板的功能而已。

共享白板使用的是Json来对控件的属性序列化的,然后通过net.tcp方式传送到服务器,然后服务器使用的“推”的方式把序列化后的属性广播出去。

下图为用户"user-1"使用"笔"进行画图,同时user-2与user-3接收到同样的信息并展示到画图版中。

 

本示例中我使用的是json来序列化对象的所有属性并进行传输。我把序列化与反序列化的方法都写成了扩展方法。如下:

 

Json序列化
 1 #region Json序列化
 2     public static class JsonSerializerHelper
 3     {
 4         /// <summary>
 5         /// 添加一个扩展方法为字符串
 6         /// </summary>
 7         /// <typeparam name="T">预期的类型</typeparam>
 8         /// <param name="json">JSON字符串数据</param>
 9         /// <returns>反序列化的对象图</returns>
10         public static T JsonDeserialize<T>(this string json)
11         {
12             using (var mstream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
13             {
14                 var serializable = new DataContractJsonSerializer(typeof(T));
15                 return (T)serializable.ReadObject(mstream);
16             }
17         }
18 
19         /// <summary>
20         /// 序列化对象JSON字符串
21         /// </summary>
22         /// <param name="obj">对象序列化</param>
23         /// <returns>序列化字符串</returns>
24         public static string JsonSerialize(this object obj)
25         {
26             using (var mstream = new MemoryStream())
27             {
28                 var serializable = new DataContractJsonSerializer(obj.GetType());
29                 serializable.WriteObject(mstream, obj);
30                 mstream.Position = 0;
31                 using (var reader = new StreamReader(mstream))
32                 {
33                     return reader.ReadToEnd();
34                 }
35             }
36         }
37     }
38     #endregion

 

 

其它的功能就很容易实现了,这里就不做太多的讲解了。请下载demo后自己研究吧,有什么不太清楚的地方您可以留言给偶。

/Files/homezzm/Demo聊天与共享白板.rar

posted @ 2009-12-27 11:09  Sandglass  阅读(2437)  评论(8编辑  收藏  举报