演示已更新到此节介绍:
这节我们来实现在线用户区的显示,把上两节介绍那张图再弄来,看在线用户区是哪块:
一眼扫过看到了,是第四区,现在开始了,还是上次下棋区域一样的逻辑,往Index.xaml里拉一个Board控件,然后后台写两行代码代码一下。
当然了,得新建一个用户控件:就叫:OnlineUser.xaml,好,空白的在线用户建完了,下面还是两步实现加载:
2:后台动态加载控件了,后台代码就两行,看今天新加的那。
OK,控件就相当于加载完了。接下来的任务就是要实现OnlineUser控件里的内容显示了:
看这个不太直观,还是来张图:
现在看到布局情况了吧,界面布局就差不多了,接下来我们要获取服务端的用户列表,同时接收服务端的更新通知。
于是,转入WCF服务端了,加两个东东,一个获取用户列表,一个回调通知用户更新。[和房间列表几乎一个样]
打开IService.cs,加入接口,我们只要房间内的用户列表就行了:
然后增加回调接口,有新用户进入时,要通知我们的:
打开ICallBack.cs接口,由于只有两行,就顺便复制出来了[回调不熟悉的,回去再看通讯基础[十四--十七]那几节]:
通知用户那,由于用户有进入和退出,所以增加参数传递。
说了N次了,回调的是方法是给客户端实现的,所以我们在服务端不实现。
看,代码相当的简洁简单吧,没办法,我们的存档结构Dictionary存的好。
用户列表获取完事了,但是用户通知更新还没完事呢,这里一并处理了:
在用户进入房间和退出房间的时候,我们要调用一下那个回调通知房间内用户更新:
我们回到Notify类,上节有了一个通知房间更新的方法,这里我们添加一个用户更新的方法:
还是一样的很简洁,用户不是自己,就通知更新。
现在回到进入房间和退出房间的方法里,调用下这个方法吧:
方法太长,就不全复制,这里复制两行好了:
同样的,退出房间方法里也有,也复制两行代码好了:
至此,WCF服务端代码就完成了,剩下的就是客户端获取显示了。
再次提醒,编绎WCF服务端项目,客户端更新引用引用
好了,我们回到OnlineUser.xaml.cs后台代码里,要开始获取数据了:
构造函数里我们调用了一下:GetPlayerListAsync,由于WCF都是异步的,所以都有一个事件来处理获取之后的执行方法:
在“e”的参数里,总是有我们要的数据:
1。先把自己的昵称打进去,
2。判断如果获取到数据,
3。显示下在线用户数,
4。然后清除下用户列表,
5。循环添加了,由于昵称可以重复,所以加个ID的前四位在后面用于区别一下。
在线用户列表就显示完了,接下来实现新用户进入和退出的更新:
构造函数里添加一行通知事件代码:
接下来同样实现用户通知更新:
代码也很简洁了,如果是进入就添加,退出就删除,然后更新下在线用户数:
至此,我们就折腾完了,只是没有文字提示用户进入和退出,这个纠结了点。。。
就纠结了先吧,等下节我们实现在线聊天的时候,我们把文字往那边显示去。
OK,一切就绪,还是F5运行:
用了三个浏览器看了下效果,太阳,只有列表出来,没有被用户通知更新,查一下代码先
查出来了,原来在Notify类里的用户通知的房间号写错了,默认从房间通知那里Copy来的,房间号写了0。
OK,再次就绪,F5运行。
还是三个浏览器,这次正常了,OK,这节就到此结束了,下节再实现在线聊天,顺便把纠结的文字提示放那边去显示。