文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SilverLight搭建WCF聊天室详细过程(八)发送文本消息

SilverLight搭建WCF聊天室详细过程(八)发送文本消息

时间:2010-12-26  来源:fugitiver

         上一节为大家演示了如何添加到自定义任务栏来模仿windows界面,这节我们就开始聊天室的中心功能,发送文本消息,先看流程图:

        流程比较简单,客户端获取RichTextBox消息后通过WCF接口调用服务端message()函数,这个不多讲,重要的讲下思路,先给大家关键代码:

 

代码 //如果输入为回车,则发送消息
        private void rtbSendContent_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                sendTextMessage();
            }
        }

        //发送文本消息,主要传递richtextbox里的xaml,为了简化把不必要的xaml删掉
        string sendXaml = "";
        private void btSend_Click(object sender, RoutedEventArgs e)
        {
            sendTextMessage();
        }

        //发送文本消息
        private void sendTextMessage()
        {
            //判断消息是否为空
            if (rtbSendContent.Xaml != "" & rtbSendContent.Xaml.Contains("</Paragraph>"))
            {
                //要发送的内容
                sendXaml = rtbSendContent.Xaml.Substring(rtbSendContent.Xaml.IndexOf(">") + 1, rtbSendContent.Xaml.IndexOf("</Section>") - rtbSendContent.Xaml.IndexOf(">") - 1);
                operation.prox.messageAsync(tbChatName.Text.ToString(), sendXaml);//发送文本消息
                rtbSendContent.Blocks.Clear();//清空富文本框
            }
        }

 

        sendTextMessage()函数为消息处理,rtbSendContent.Xaml为获取RichTextBox的Xaml代码,我们先看下获取到的Xaml代码:

 

代码 "<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Paragraph FontSize=\"11\" FontFamily=\"Portable User Interface\" Foreground=\"#FF000000\" FontWeight=\"Normal\" FontStyle=\"Normal\" FontStretch=\"Normal\" TextAlignment=\"Left\"><Run Text=\"我发送的内容\" /></Paragraph></Section>"

 

        这段代码是我断点后获得的,有人可能会问获得它有什么必要,我给出几点解释和我的思路:

        1.RichTextBox不能序列化成二进制,也许在WPF中可以,但是SL中不行,所以我们只能传送获取到的Xaml。

        2.RichTextBox在插入一张图片后获取xaml代码是不能获取到这张图片的xaml的,也就是说xaml代码中找不到图片信息,所以也就不能图片,文字一起发送

        3.有人可能说了,我直接发送整个获取道德xaml代码,例如上边的代码,然后在对方接收时把这段xaml赋值给接收用的RichTextBox,这个思路可以,但是我上边提到了xaml中没有图片信息,考虑以下环境:我先给对方发送一张图片,对方可以显示出,我再发送一个文本消息,当把xaml赋值给接受的RichTextBox时将覆盖图片,图片就不能显示,而且每次都要发送整个聊天窗口中已存在的聊天内容,导致数据量很大。

        4.我给出我的解决办法,大家可以观察这段xaml代码,都是以<Section>开头,以</Section>结尾,通过查看msdn有关RichTextBox介绍,我们发现发我们发送的文本消息其实是<Paragraph></Paragraph>里面的内容,也就是说<Section></Section>这个节点可以去掉,也就是把每段文字拆分成<Paragraph></Paragraph>几段这种节点发送,然后在接收时进行组装,接收显示内容我会在下一步进行讲解,这样发送的数据流大小压缩到最小,也不会影响显示。

        5.还有一点就是按“回车”发送消息,这里定义一个rtbSendContent_KeyDown()事件,判断输入是不是“回车”,如果是就发送消息,但是我这里要提醒大家,一定要把RichTextBox的AcceptsReturn属性设置为False,这个属性表示是否按下回车后产生换行符,这个在发送消息时不需要,我在这里郁闷了很久,现在拿出来给大家做个备忘。

        总结:其实发送消息和接受消息就是一个xaml拆分和组装的过程,大家要充分利用各种可以使用的资源,我总觉得把自己的思想转变成编程语言才是一个程序开发者该做的,发送和接收过程很多朋友都在问,在这里希望我阐述的对大家有所帮助。  

        谢谢大家每次的意见,这次讲解占了大部分,希望对新手入门带来帮助,如果各位朋友觉得有所帮助,希望大家点下推荐,你们的支持才是我更新博客的动力,谢谢大家。

        本节代码和数据库下载     

相关阅读 更多 +
排行榜 更多 +
我的武侠梦手游下载

我的武侠梦手游下载

角色扮演 下载
快乐连连看下载免费版

快乐连连看下载免费版

休闲益智 下载
泛滥死者布道手机版下载

泛滥死者布道手机版下载

角色扮演 下载