上一篇文章,我们的CIM项目已经做到发送验证消息了,本篇文章将实现验证消息的接收和存储。
编程思路
既然已经实现了发送验证消息,如何对方在线,消息将直接转发给用户,如果不在线,则存储在数据库等待用户上线后转发给用户。不管是哪一种情况,客户端必须具有接受验证消息的功能。
步骤1:我们需要在客户端程序上写一个实时接收服务端消息的方法。我们已经在前面提到过将普通消息和验证消息以类似的方式进行区分,因此这个接收消息的方法中必须要能够按照规则区分两种类型的消息。
步骤2:接收到验证消息后如何表现到界面上。也就是说怎样显示在会话列表中。
步骤3:如何在本地存储验证消息记录
本篇文章我们就要实现这三个步骤就能完成目标。那么开始吧。
客户端接收消息功能实现
我们要提一下之前的原则:客户端要时刻接收消息,必须开启独立的线程。所有的消息记录都将存储在本地。所以接收到消息后不仅要在界面上显示,还有在后台存储到本地文件中。
在Major主窗体的加载事件中补充一个线程:
//开启线程接收服务端发来的消息
Thread receiveThread = new Thread(receiveMsg);
receiveThread.IsBackground = true;
receiveThread.Start();
接着是receiveMsg的具体实现:
private void receiveMsg()
{
//死循环保证能一直接收消息
while (true)
{
byte[] buffer = new byte[1024];
int len = Common.socket.Receive(buffer);
//该msg可以是普通消息,也可以是验证消息
string msg = Encoding.UTF8.GetString(buffer, 0, len);
//通过split将msg中的数据拆分出来
string[] msgarr = msg.Split(new string[] {Common.splitFlag }, StringSplitOptions.None);
//通过判断拆分后包含几段来区分是普通消息还是验证消息
if(msgarr.Length == 3)
{//是普通消息 先不做
MessageBox.Show("1");//测试用
}
else if(msgarr.Length ==2)