第一次使用dycom组件心得体会
2011-01-11 20:43
786 查看
今天开始深入研究dycom组建,因本人愚笨,第一次研究还是很辛苦的,多亏超人耐心指导,总算有所成果,在此一并感谢,现将研究新得体会跟大家分享,不接受拍砖,嘿嘿。。。
俗话说万事开头难,一旦开了头,也就柳暗花明又一村(希望是这样,哈哈)。首先,做好准备工作,也就是把服务端建起来,具体操作见:http://dy2com.com/a/xuexiziyuan/shipinziliao/2011/0112/40.html;这里就不再熬述;然后就是正常的selverlight项目建设,建好后的目录如下(仅作参考,如有不合理的地方还请多多指教,关键是看关于dycom的内容):
项目模型初步完成,先挂起两个服务,哈哈。
运行,正常,
然后是客户端,我做了一个登录:
登录成功
接下来重要的是代码该怎么加,先贴代码:
修改了这句:
这几句代码的意思在手册里可以找到,我再磨叽一遍,主要是下边这句
将实体做json序列化,然后下边那句发送到服务器端。
(注:客户端所用到类及方法与服务器端用到的代码是一样的,所以超人的速查手册通用于客户端与服务器端,地址:http://dy2com.com/a/xuexiziyuan/wendangziliao/2011/0114/46.html)
[align=left]服务器端代码该如何写,先贴代码:[/align]
做json反序列化,还原原始数据,数据还原后就可以做自己想做的事了,这里无非就是验证数据存在,但还没有加,哈哈,验证的结果就可以回发给客户端,回发的数据结构可以自己定义,也就是在处理下,这也是超人的高明之处(尽量不拍在马腿上,嘿嘿。。。),客户端接收到数据后跟在服务器端操作一样,做json反序列化,还原真实数据,给据结果做相应操作,支次客户端与服务器端的一次交互也就完成了。
无非就是添加了如下代码:
修改了如下代码:
关键代码是下边这句
(注:如果想在服务器端或客户端还原User实体,需要客户端与服务器端同时定义实体,也就是里边一个,外边一个,不然找不到。)
附超人语录:
1.
超人也是人。
2.
客户端到服务器端只有send一个方法(我认为:目前是这样,后面可能会有更丰富的功能扩展)。
3.
(int)op.login为啥要枚举下,然后强制转换?无非就是可读性。
4.
//数据转json
string jsondata = mapper.tojson<classtype>(data);
//json转数据
var myclassdata= mapper.toobject<classtye>(jsondata);
5.
停电可以用借手机网络上网,只开QQ
文笔有限,不够华丽;
技术有限,不够深度;
附源码:http://files.cnblogs.com/txst/ChatRoom.rar
文章来源:http://bbs.dy2com.com/forum.php?mod=viewthread&tid=58&page=1&extra=#pid97 如转载请保留此链接。
俗话说万事开头难,一旦开了头,也就柳暗花明又一村(希望是这样,哈哈)。首先,做好准备工作,也就是把服务端建起来,具体操作见:http://dy2com.com/a/xuexiziyuan/shipinziliao/2011/0112/40.html;这里就不再熬述;然后就是正常的selverlight项目建设,建好后的目录如下(仅作参考,如有不合理的地方还请多多指教,关键是看关于dycom的内容):
项目模型初步完成,先挂起两个服务,哈哈。
运行,正常,
然后是客户端,我做了一个登录:
登录成功
接下来重要的是代码该怎么加,先贴代码:
private void btnSubmit_Click(object sender, RoutedEventArgs e) { this.label1.Content = "准备登录!"; listBox1.Items.Clear(); //实例化DYCom客户端实例,服务端地址,端口号,缓冲区大小 poxy = new ClientPoxy("127.0.0.1", 4510, 1024); //连接事件注册处理函数 poxy.onConnet = new OnConnet(onConnect); //消息到来事件注册处理函数 poxy.onData = new OnData(onData); //断开连接事件注册处理函数 poxy.onDisconnet = new OnDisConnet(ondisConnect); //发送message到服务端 //这里消息体本身是操作符+message,使用UTF8编码,读取的时候也一样要按这个消息体顺序进行读取消息 //DYWriter.Merge是合并DYWriter.GetDYBytes消息之用 JsonMapper mapper = new JsonMapper(); Model.User u = new Model.User(); u.Name = this.Uname.Text.Trim(); u.Pwd = this.Upwd.Text.Trim(); string jsondata = mapper.ToJson(u); poxy.Send(DYWriter.Merge(DYWriter.GetDYBytes((int)op.login), DYWriter.GetDYBytes(jsondata, System.Text.Encoding.UTF8))); }
修改了这句:
poxy.Send(DYWriter.Merge(DYWriter.GetDYBytes((int)op.login), DYWriter.GetDYBytes(jsondata, System.Text.Encoding.UTF8)));
这几句代码的意思在手册里可以找到,我再磨叽一遍,主要是下边这句
将实体做json序列化,然后下边那句发送到服务器端。
string jsondata = mapper.ToJson(u);
(注:客户端所用到类及方法与服务器端用到的代码是一样的,所以超人的速查手册通用于客户端与服务器端,地址:http://dy2com.com/a/xuexiziyuan/wendangziliao/2011/0114/46.html)
[align=left]服务器端代码该如何写,先贴代码:[/align]
//用户消息收到事件 void server_OnDataEvent(byte[] data, UserInfo user) { //实例化DYCOM消息解码器 DYReader read = new DYReader(data); //操作符变量 int type; //读取消息中的操作符 if (!read.ReadInt32(out type)) { //操作符不存即断开当前客户端连接 server.DisConnet(user.Sock); //跳出本函数 return; } //转换操作符 op opera = (op)type; //判断操作符 if (opera == op.login) { //变量 string message; //读出一个字符串值到message变量,使用UTF8解码 if (read.ReadString(out message, Encoding.UTF8)) { ChatRoom.Model.User u = new ChatRoom.Model.User(); JsonMapper mapper = new JsonMapper(); var myclassdata = mapper.ToObject<ChatRoom.Model.User>(message); u = (ChatRoom.Model.User)myclassdata; string str = u.Name + u.Pwd; //clientHanddle.joinZoned(myclassdata); //发送message到所有指定客户端售 //这里消息体本身是操作符+message,读取的时候也一样要按这个消息体顺序进行读取消息 //DYWriter.Merge是合并DYWriter.GetDYBytes消息之用 server.SendToAll<myClient>(clients, DYWriter.Merge(DYWriter.GetDYBytes((int)op.login), DYWriter.GetDYBytes(str, Encoding.UTF8))); } } }
ChatRoom.Model.User u = new ChatRoom.Model.User(); JsonMapper mapper = new JsonMapper(); var myclassdata = mapper.ToObject<ChatRoom.Model.User>(message); u = (ChatRoom.Model.User)myclassdata; string str = u.Name + u.Pwd;
做json反序列化,还原原始数据,数据还原后就可以做自己想做的事了,这里无非就是验证数据存在,但还没有加,哈哈,验证的结果就可以回发给客户端,回发的数据结构可以自己定义,也就是在处理下,这也是超人的高明之处(尽量不拍在马腿上,嘿嘿。。。),客户端接收到数据后跟在服务器端操作一样,做json反序列化,还原真实数据,给据结果做相应操作,支次客户端与服务器端的一次交互也就完成了。
无非就是添加了如下代码:
修改了如下代码:
server.SendToAll<myClient>(clients, DYWriter.Merge(DYWriter.GetDYBytes((int)op.login), DYWriter.GetDYBytes(str, Encoding.UTF8)));
关键代码是下边这句
mapper.ToObject<ChatRoom.Model.User>(message);
(注:如果想在服务器端或客户端还原User实体,需要客户端与服务器端同时定义实体,也就是里边一个,外边一个,不然找不到。)
附超人语录:
1.
超人也是人。
2.
客户端到服务器端只有send一个方法(我认为:目前是这样,后面可能会有更丰富的功能扩展)。
3.
(int)op.login为啥要枚举下,然后强制转换?无非就是可读性。
4.
//数据转json
string jsondata = mapper.tojson<classtype>(data);
//json转数据
var myclassdata= mapper.toobject<classtye>(jsondata);
5.
停电可以用借手机网络上网,只开QQ
文笔有限,不够华丽;
技术有限,不够深度;
附源码:http://files.cnblogs.com/txst/ChatRoom.rar
文章来源:http://bbs.dy2com.com/forum.php?mod=viewthread&tid=58&page=1&extra=#pid97 如转载请保留此链接。
相关文章推荐
- 第一次使用Git心得体会
- 记录通用权限管理系统组件使用心得体会,写技术博客赢IPad2
- 记录通用权限管理系统组件使用心得体会,写技术博客赢IPad2
- 记录通用权限管理系统组件使用心得体会,写技术博客赢IPad2
- 第一次使用CSDN 心得体会
- 使用 mac 最近一段时间获得的一些心得体会
- 第一次面试的心得体会
- 开发标准化软件组件能让程序员在大城市过上体面的生活 -- 多系统用户权限管理标准件开发销售心得体会
- 关于android源码的使用心得体会
- 关于使用key/value数据库redis和TTSERVER的心得体会
- 两款.NET电子表格组件使用心得
- jeecg的使用心得体会和改进建议
- 关于polymer原生组件paper-input的部分属性的使用心得
- systemctl命令使用方法和心得体会
- Socut.Data.dll 与AspNetPager.dll使用说明及心得体会
- 共享Title标签在使用标点符号的心得体会
- CSS使用心得体会
- ECharts t图表组件使用心得
- 终于赚了100元——记第一次虚拟炒股 + 搜狗拼音使用体会
- msyql使用心得体会(陆续更新)