`
lovecontry
  • 浏览: 1095122 次
文章分类
社区版块
存档分类
最新评论

小I机器人初探

 
阅读更多

很早就知道小I机器人做的不错,但是一直没有时间去研究,趁着元旦放假,下来.Net的SDK好好研究了一下,Demo程序是一个控制台程序,用户交互还不是很方便,此外代码中竟然有重复的地方,看来小I机器人的主人们不是那么认真,唉,真苦了小I这孩子:)

我重新做一个基于Windows窗体的程序,添加了输入窗口,这样机器人不会回答的时候,主人也可以代答。此外代码也重新进行了整理,所有信息也都修改为中文,方便了用户调试和开发。此外发现该程序一旦启动,便无法正常关闭,不知道为什么?这也许是Demo示例开发者执意为控制台程序的原因之一吧(瞎猜的,初次接触该SDK程序,我也有很多不明白的地方)。
程序运行后,还是让人眼前一亮的,下面是程序运行截图。
相关代码如下,需要的朋友可以参考一下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;
using System.Runtime.Serialization;
using System.Collections.Specialized;
using System.Xml;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using Incesoft.BotPlatform.SDK;
using Incesoft.BotPlatform.SDK.Interface;
namespace YFMGC
{
public partial class frmMain : Form
{
string address; //地址
int port; //端口
string user; //用户
string password; //密码
IRobotServer server;
MyHandler m_MyHandler;
MyListener m_MyListener;
public IRobotSession session = null;
public frmMain()
{
InitializeComponent();
}
//初始化
private void frmMain_Load(object sender, EventArgs e)
{
address = "msnbot.incesoft.com";
port = 6602;
user = "SP042761";
password = "yefan7722";
server = RobotServerFactory.Instance.createRobotServer(address, port);
m_MyHandler = new MyHandler(server, this);
m_MyListener = new MyListener(this);
server.addRobotHandler(m_MyHandler);
server.addConnectionListener(m_MyListener);
lblEx_LinkClicked(null, null);
txtInfo.Enabled = false;
txtSend.Enabled = false;
}
//关闭
private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
//无法成功关闭
//server.removeConnectionistener(m_MyListener);
//server.removeRobotHandler(m_MyHandler);
//m_MyListener.serverDisconnected(server);
//server = null;
//m_MyListener = null;
//m_MyHandler = null;
//Application.Exit();
}
//登录/退出
private void btnLogin_Click(object sender, EventArgs e)
{
if (btnLogin.Text == "登录")
{
try
{
btnLogin.Enabled = false;
server.login(user, password, 30000);
btnLogin.Text = "退出";
btnLogin.Enabled = true;
txtInfo.Enabled = true;
txtSend.Enabled = true;
}
catch (RobotException ex)
{
btnLogin.Enabled = true;
ShowInfo("登录错误:" + ex.Message);
}
}
else
{
try
{
btnLogin.Enabled = false;
server.logout();
btnLogin.Text = "登录";
btnLogin.Enabled = true;
txtInfo.Enabled = false;
txtSend.Enabled = false;
}
catch (RobotException ex)
{
btnLogin.Enabled = true;
ShowInfo("退出错误:" + ex.Message);
}
}
}
//显示信息
public delegate void lbInfo_ShowInfo(string strInfo);
public void ShowInfo(string strInfo)
{
if (strInfo.Length == 0) return;
if (lbInfo.InvokeRequired)
{
lbInfo_ShowInfo run = new lbInfo_ShowInfo(ShowInfo);
lbInfo.Invoke(run, new object[] { strInfo });
}
else
{
lbInfo.Items.Insert(0, "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] " + strInfo);
lbInfo.TopIndex = 0;
lbInfo.SelectedIndex = 0;
}
}
//显示接收的数据
public delegate void txtInfo_ShowInfo(string strInfo);
public void TxtShowInfo(string strInfo)
{
if (strInfo.Length == 0) return;
if (txtInfo.InvokeRequired)
{
txtInfo_ShowInfo run = new txtInfo_ShowInfo(TxtShowInfo);
txtInfo.Invoke(run, new object[] { strInfo });
}
else
{
txtInfo.Text +="[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] " + strInfo+"/r/n";
}
}
private void frmMain_SizeChanged(object sender, EventArgs e)
{
scBar.Height = this.Height - 159 + (lbInfo.Visible? 0:lbInfo.Height);
}
//显隐扩展面板
private void lblEx_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (lbInfo.Visible)
{
lblEx.Text = ">>>";
lbInfo.Visible = false;
this.Height = this.Height - lbInfo.Height;
}
else
{
lblEx.Text = "<<<";
lbInfo.Visible = true;
this.Height = this.Height + lbInfo.Height;
}
}
//发送
private void btnSend_Click(object sender, EventArgs e)
{
IRobotMessage msg = session.createMessage();
msg.setSignature("[叶帆插话]");
msg.setString(txtSend.Text);
session.send(msg);
txtSend.Text = "";
}
}
class MyHandler : IRobotHandler
{
frmMain fm;
public MyHandler(IRobotServer server,frmMain fm)
{
this.server = server;
this.fm = fm;
}
private IRobotServer server;
private Random rdm = new Random();
#region命令菜单
public System.String commandList = "*****************************************/r" +
"**BOTPLATFORM SDK DEMO COMMAND LIST**/r" +
"*****************************************/r" +
" preface --- test message preface. /r" +
" emo ------- test emoticon./r" +
" nudge ----- test nudge./r" +
" p4 -------- test msn activity./r" +
" typing ---- test typing info./r" +
" name ------ test change friendly name./r" +
" pm -------- test change personal msg./r" +
" dp -------- test change display picture./r" +
" bye --------- test close session./r" +
" help ------ print this command list./r" +
" ? --------- print this command list./r" +
" ent --------- print enterprise only command list.";
public System.String commandListEnt = "*****************************************/r" +
"**BOTPLATFORM SDK ENTERPRISE ONLY COMMAND LIST**/r" +
"**Only use the following commands after upgraded your sp account**/r" +
"*****************************************/r" +
" file ------ test file transfer./r" +
" bg -------- test background sharing./r" +
" ink ------- test send ink./r" +
" wink ------ test send wink./r" +
" voice ----- test send voiceclip./r" +
" webcam ---- test send webcam/r" +
" cs <account> -------- test create session./r" +
" pu <account> ------ test push offline message./r" +
" iv <account> -------- test invite user./r" +
" ent --------- print this command list.";
#endregion
public virtual void sessionOpened(IRobotSession session)
{
fm.session = session;
fm.ShowInfo("会话开始...");
try
{
switch (session.OpenMode)
{
case SessionOpenMode.OPEN_MODE_CONV_OPEN:
session.send(commandList);
break;
case SessionOpenMode.OPEN_MODE_ROBOT:
session.send("You have an alert message: blablabla");
break;
default:
break;
}
}
catch (RobotException e)
{
util.consoleOut(e.ToString());
}
}
public virtual void sessionClosed(IRobotSession session)
{
fm.ShowInfo("会话结束");
}
//消息处理
public virtual void messageReceived(IRobotSession session, IRobotMessage message)
{
fm.session = session;
fm.TxtShowInfo(message.String);
try
{
string command = message.String;
IRobotMessage msg = session.createMessage();
string command_ex = "";
if (command.Length > 2)
{
command_ex = command.Substring(0, 2);
if (command_ex == "cs" || command_ex == "pu" || command_ex == "iv")
{
command = command_ex;
command_ex = command.Substring(2).Trim();
}
}
switch (command.ToLower())
{
case "help": //帮助
case "?":
session.send(commandList);
break;
case "preface": //设置用户
msg.setSignature("叶叶 - " + rdm.Next());
msg.setString("我来说一下");
session.send(msg);
break;
case "nudge": //闪屏
session.sendNudge();
break;
case "p4": //扩展界面
session.sendActivity("http://blog.csdn.net/yefanqiu", "叶帆工作室");
break;
case "typing": //显示正在输入信息状态
session.sendTyping();
break;
case "name": //显示名
server.DisplayName = "YF.MGC-" + rdm.Next();
break;
case "pm": //悄悄话
server.PersonalMessage = "叶帆-" + rdm.Next();
break;
case "dp": //显示图片
server.DisplayPicture = "yf01"; //__default.dat";
break;
case "emo": //发送含图片的信息
msg.registerEmoticon("(1)", "yf001.png");
msg.registerEmoticon("(2)", "yf002.png");
msg.registerEmoticon("(3)", "yf003.png");
msg.setString("a(1)b(2)c(3)d");
session.send(msg);
break;
case "ent":
session.send(commandListEnt);
break;
case "cs": //创建一个对话
server.createSession(session.Robot, command_ex);
break;
case "pu": //弹出消息
server.pushMessage(session.Robot, command_ex, "你的不在线消息:你在哪里...");
break;
case "iv": //邀请用户
session.inviteUser(command_ex);
break;
case "bye": //退出会话
session.close();
break;
default:
session.send("俺太小,不懂你的意思!请输入'?',看看我明白什么?");
break;
}
//System.String ret = "font name: " + message.FontName + "/r";
//ret = ret + "font style: " + message.FontStyle + "/r";
//ret = ret + "font color: " + message.FontColor.ToString() + "/r";
//ret = ret + "message content: " + "/r";
//ret = ret + message.String;
//session.send(ret);
}
catch (RobotException e)
{
util.consoleOut(e.ToString());
}
}
public virtual void nudgeReceived(IRobotSession session)
{
fm.ShowInfo("事件:闪屏已收到");
}
public virtual void activityAccepted(IRobotSession session)
{
fm.ShowInfo("事件:活动面板已打开");
}
public virtual void activityRejected(IRobotSession session)
{
fm.ShowInfo("事件:活动面板被拒绝");
}
public virtual void userAdd(String robot, String user)
{
fm.ShowInfo("事件:用户被添加("+robot+","+user+")");
}
public virtual void userRemove(String robot, String user)
{
fm.ShowInfo("事件:用户被删除(" + robot + "," + user + ")");
}
public virtual void exceptionCaught(IRobotSession session, System.Exception cause)
{
fm.ShowInfo("服务器出错:" + cause.Message);
}
public virtual void activityClosed(IRobotSession session)
{
fm.ShowInfo("事件:活动面板被关闭");
}
public virtual void fileAccepted(IRobotSession session)
{
fm.ShowInfo("事件:发送的文件被接收");
}
public virtual void fileRejected(IRobotSession session)
{
fm.ShowInfo("事件:发送的文件被舍弃");
}
public virtual void fileTransferEnded(IRobotSession session)
{
fm.ShowInfo("事件:文件传送完毕");
}
public virtual void backgroundAccepted(IRobotSession session)
{
fm.ShowInfo("事件:会话场景被接收");
}
public virtual void backgroundRejected(IRobotSession session)
{
fm.ShowInfo("事件:会话场景被舍弃");
}
public virtual void backgroundTransferEnded(IRobotSession session)
{
fm.ShowInfo("事件:会话场景设置完毕");
}
public virtual void webcamAccepted(IRobotSession session)
{
fm.ShowInfo("事件:画面被接收");
}
public virtual void webcamRejected(IRobotSession session)
{
fm.ShowInfo("事件:画面被舍弃");
}
public virtual void activityLoaded(IRobotSession session)
{
fm.ShowInfo("事件:活动面板用户已响应");
}
public virtual void activityReceived(IRobotSession session, System.String data)
{
fm.ShowInfo("事件:活动面板用户已输入数据" + data);
}
public virtual void userJoined(IRobotSession session, IRobotUser user)
{
fm.ShowInfo("事件:用户已加入(" + user+")");
}
public virtual void userLeft(IRobotSession session, IRobotUser user)
{
fm.ShowInfo("事件:用户(" + user + ")");
}
public virtual void userUpdated(IRobotUser user)
{
fm.ShowInfo("事件:用户信息已更新(" + user.ID + "," + user.Status + "," + user.FriendlyName + ")");
}
public virtual void personalMessageUpdated(System.String robot, System.String user, System.String personalMessage)
{
fm.ShowInfo("事件:悄悄话(" + robot + ", " + user + ", " + personalMessage + ")");
}
public virtual void contactListReceived(System.String robot, System.Collections.ArrayList contactList)
{
fm.ShowInfo("事件:会话用户列表");
for (int i = 0; i < contactList.Count; i++)
{
IRobotUser user = (IRobotUser)contactList[i];
fm.ShowInfo("User " + i + ": " + user.ID);
}
}
}
class MyListener : IRobotConnectionListener
{
frmMain fm;
public MyListener(frmMain fm)
{
this.fm = fm;
}
public void serverConnected(IRobotServer server)
{
fm.ShowInfo("服务器已连接成功,正在登录,请耐心等待 ...");
}
public void serverReconnected(IRobotServer server)
{
fm.ShowInfo("再次与服务器连接...");
}
public void serverDisconnected(IRobotServer server)
{
fm.ShowInfo("服务器已断开!");
}
public void serverLoggedIn(IRobotServer sever)
{
fm.ShowInfo("用户登录成功!");
}
}
}

分享到:
评论

相关推荐

    参考资料-智能避障机器人设计初探.zip

    智能避障机器人是一种具有自主导航和避障功能的自动化设备,广泛应用于科研、教育和家庭等领域。本参考资料主要探讨了智能避障机器人的设计原理、关键技术和应用实践,旨在为对此感兴趣的人士提供深入理解的基础。 ...

    人工智能基础与应用课件.pptx

    A I 遇见应用 兴趣引领未来 人工智能基础与应用项目一 初探人工智能 人工智能基础与应用课件全文共246页,当前为第1页。 目 录 教学目标 教学要求 内容概览 相关知识 1.1.1 机器能思考吗? 1.1.2 人工智能的发展历程...

    8、基础省选+NOI-第8部分 数学杂项与计算几何初步_2020.08.29.pdf

    - **定义**:对于平面上的一组点集合 `S`,其凸包 `C` 是一个凸多边形,满足所有点都在 `C` 的边界上或内部,并且不存在比 `C` 更小的凸多边形包含 `S`。 - **算法**:常用的算法有 Graham 扫描法、Jarvis 击打法等...

    nanopi M3 教程

    - **I2C、GPIO、SPI、串口**:这些接口允许开发者直接与外部设备进行通信。 - **实践应用**:通过示例演示如何利用这些接口控制 LED、读取传感器数据等。 #### 4. Python 编程 - **Python 安装**:介绍如何在 ...

    支持pyramid2.x的kotti web代码

    Kotti 是一个基于 Pyramid 框架的 Python 内容管理系统(CMS),适合用来搭建中小型网站、文档库、企业展示平台、知识库等需要灵活内容结构和权限模型的项目。它本身更像一个可以二次开发的 CMS 框架,比 WordPress、Drupal 这类“一装就用”的系统更倾向于开发者定制和扩展。 这是支持pyramid2.x版本的kotti! tar -xzvf kotti1.0.tar.gz 解压缩 进入目录执行 pip install -e . 来安装, 然后执行pserve app.ini 启动。 用浏览器浏览127.0.0.1:5000 即可浏览。 用户名admin ,口令qwerty

    cmd-bat-批处理-脚本-hello world.zip

    cmd-bat-批处理-脚本-hello world.zip

    知识付费系统自动采集V3.0 跳转不卡顿+搭建教程

    知识付费系统自动采集V3.0 跳转不卡顿+搭建教程,不和外面的一样跳转卡顿,这个跳转不卡顿,支持三级分销。

    基于Matlab实现图像形状纹理颜色特征提取

    在Matlab环境下,对图像进行特征提取时,主要涵盖形状、纹理以及颜色这三大关键特征。其中,对于纹理特征的提取,采用灰度梯度共生矩阵这一方法来实现。通过灰度梯度共生矩阵,可以有效地捕捉图像中像素灰度值之间在不同方向和距离上的相互关系,进而量化地反映出图像的纹理特性,为后续的图像分析、分类等任务提供重要的纹理信息依据。

    实证数据-2010-2023年上市公司-管理层情感语调数据-社科经管.rar

    该数据集为2010-2023年中国A股上市公司管理层情感语调的年度面板数据,覆盖45,320条样本,数据源自年报及半年报的"管理层讨论与分析"部分。通过构建中文金融情感词典(融合《知网情感分析用词典》与L&M金融词汇表),采用文本分析方法计算情感语调指标,包括:正面/负面词汇数量、文本相似度、情感语调1((积极词-消极词)/总词数)和情感语调2((积极词-消极词)/(积极词+消极词))。同时包含盈利预测偏差、审计意见类型等衍生指标,可用于研究信息披露质量、市场反应及代理问题。该数据复刻了《管理世界》《财经研究》等期刊的变量构建方法,被应用于分析语调操纵对债券市场的影响,学术常用度与稀缺度较高。

    cmd-bat-批处理-脚本-FTIME.zip

    cmd-bat-批处理-脚本-FTIME.zip

    1747829038637.png

    1747829038637.png

    2025年自动化X光检查机项目大数据研究报告.docx

    2025年自动化X光检查机项目大数据研究报告.docx

    基于Logisim的原码与补码一位乘法器设计

    在计算机组成原理课程设计中,我全程跟随老师的指导,独立完成了以下两项任务:一是利用Logisim软件进行原码一位乘法器的仿真设计,通过逐步搭建电路、配置逻辑单元,实现了原码乘法运算的完整流程,深入理解了原码乘法的原理和实现机制;二是完成了补码一位乘法器的Logisim仿真,同样按照老师讲解的步骤,精心设计电路,确保补码乘法运算的正确性,进一步掌握了补码乘法的运算规则和电路实现方法。通过这两个项目,我不仅巩固了理论知识,还提升了动手实践能力和逻辑思维能力。

    cmd-bat-批处理-脚本-msvc2017.zip

    cmd-bat-批处理-脚本-msvc2017.zip

    cmd-bat-批处理-脚本-virtualcam-install.zip

    cmd-bat-批处理-脚本-virtualcam-install.zip

    二十四节气之立秋介绍.pptx

    二十四节气之立秋介绍.pptx

    cmd-bat-批处理-脚本-shift.zip

    cmd-bat-批处理-脚本-shift.zip

    二十四节气之小雪介绍.pptx

    二十四节气之小雪介绍.pptx

    java、SpringBoot面试专题,6页面试题

    java、SpringBoot面试专题,6页面试题

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

Global site tag (gtag.js) - Google Analytics