zoukankan      html  css  js  c++  java
  • 擎天柱! 变形! 让咱们组装起来Message吧! DotMSN2.0 Robot(四) [原鸟]




    内容记:

    MSN Robot就是MSN机器人, 也可以喊成MSN聊天机器人.再解释就是会自动和你聊天的MSN,再再解释就是……, 我短路了(耳朵冒烟中)

    本随笔是MSN Robot随笔系列第四篇, 内容是关于MSN Robot信息的最后结合.

     

     




    前记:

    神的右眼已经依稀可以看见梦想的征途…

     

     

     

    昨天我们伟大的实现了一个message的实体类来处理信息的接收, 信息发送, 对话加入, 对话解除, 还有一点点的心跳, 就是session_close. ( 当然,这点心跳是远远不够的,看着我的眼睛,相信我,o,希望你是个女生 >__< ~~~ )

     

    关于心跳讨论的结点比较多, 因为服务器总是有很奇怪的举动, 不把咱们T下线它总是良心不安的, 所以明天咱们单独讨论它就好了 J 今天咱们继续来组合变形金刚吧~~

     

    应该让它动起来了.

     

    什么是一个机器人呢? 它应该在收到用户发来的消息之后解析掉这个消息, 然后把答案回发给用户哟~~

     

    , 真是个冠冕堂皇标准的回答. 不用理它, 咱们还是来看看代码怎么实现吧 J

     

    // 当用户消息发过来的时候, 会触发ConversationCreated事件, 所以咱们要处理这个事件.

    messenger.ConversationCreated += new

    ConversationCreatedEventHandler(messenger_ConversationCreated);

     

    // 因为当用户发来消息的时候第一时间会来到这里

    private void messenger_ConversationCreated(object sender, ConversationCreatedEventArgs e)

    {

    // check if the request is initiated remote or by this object

    // if it is initiated remote then we have to create a conversation form. Otherwise the

    // form is already created and we don't need to create another one.

    if (e.Initiator == null)

    {

    // use the invoke method to create the form in the main thread

    this.Invoke(new CreateMessageDelegate(CreateMessage), new object[] { e.Conversation });

    }

    }

    //创建一个线程运行Message实例

    private void CreateMessage(Conversation conversation)

    {

     

      // 咱们在这里需要打开一个线程处理message, 因为语意分析和问题解决一定是堵塞型的

      // 所以咱们要考虑多用户同时请求时候的处理

    Thread depthMessage = new Thread(delegate()

    {

      // 开始执行一个Message实例

    Message mess = new Message(conversation, this);

    });

     

    depthMessage.Name = "Message";

    depthMessage.Start();

    }

     

    这时候咱们和服务器的通讯是这样的:

     

    >>> 为客户端套接字发送

    <<< 为客户端套接字接收

     

     

    <<< RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxxx@hotmail.com Venkatesh

    // 服务器说: 有一个哥们想跟你聊天诶

     

    >>> ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066

    // 咱们说: 行呀, 美女?! 大姐姐你爱吃青椒吗? &^^$%##$!@#!#!@

     

    <<< IRO 1 1 1 deaxxxx@hotmail.com Venkatesh ANS 1 OK
    //
    服务器说, 月老牵线结束, 你们俩就可劲聊吧. Make love我都不管你.

     

    OK, 醒醒, YY, 这时候咱们发现在第一步的时候触发了咱们温柔可爱贤惠善良的ConversationCreated事件, 而后咱们多线程创建了一个message处理这个对话.

     

    第二步暂时笔者尚未找到拒绝方法… -_-#... 难道男人来了咱们也得接受吗? #$@#%$#!#!^&^*^&

     

    但是在什么时候才触发第三步的接收呢? Bingo~ 答案自然是昨天帮助咱们解决掉null hellmessage类中的Switchboard_ContactJoined事件.

     

     

    OK! 简洁的今天让咱们再来看看发送消息的对接吧 J

     

     

    // 发送消息按钮单击事件

    private void inviteButton_Click(object sender, System.EventArgs e)

    {

    string tempSender = richTextBox2.Text;

     

    // MSN消息有最高发送字数限制 J 要注意哟, 太长了会引起error返回导致咱们的程序异常

    if (tempSender.Length > 800)

    {

    MessageBox.Show("发送长度不能超过");

    return;

    }

     

    if (message == null)

    {

    return;

    }

     

    // 开启一个线程处理message

    Thread depthMessage = new Thread(delegate()

    {

    if (ContactListView.SelectedItems.Count == 0)

    return;

     

    if (message.Conversation.Switchboard.Contacts.Count == 0)

    {

        

    // 获得Contact

    Contact selectedContact = (Contact)ContactListView.SelectedItems[0].Tag;

     

    // 创建对话

    Conversation Cconversation = messenger.CreateConversation();

     

    // 咱们需要先邀请好友加入咱们的会话, 然后在Message类中的join事件才能获得IRO的返回成功建立对话 J

    Cconversation.Invite(selectedContact);

     

    message = new Message(Cconversation, this);

    }

     

    message.SendInput(tempSender);

     

    });

     

    depthMessage.Name = "go";

    depthMessage.Start();

     

    }

     

    , 咱们需要了解一下Contact类就是咱们好友的资料合集, 可以点开看看这个类的包含 J 很简单, 一般咱们在读取好友资料的时候把它绑定在好友项的tag.

     

    咱们这时候已经实现了一个简单的, 美丽的, 优雅的, 但是并不十分可靠的MSN Robot J 咱们实现了接受用户消息, 接受到消息的回发, 发送消息, 添加好友, 删除好友, 对方加入咱们好友之后自动加上对方, 机器人已经活动了!

     



    活过来吧! 擎天柱!

     


  • 相关阅读:
    We7网站群系统中标胜利油田项目 开源CMS
    We7荣获“政府网站群建设最佳产品奖” 开源CMS
    JAVA中 成员变量和和实例变量区别 前行
    HTTPS 加密原理探究 前行
    zip mysql安装启动方式 前行
    如何获取监听iframe src属性的变化进行后续操作 前行
    js分割url提取参数 前行
    web跨域问题解决方案 前行
    作业3.18
    3.26作业
  • 原文地址:https://www.cnblogs.com/Bird/p/856167.html
Copyright © 2011-2022 走看看