PRTX SDK 5.0 C#即时通讯IM开发实例教程一(登录)
来源:互联网 发布:动漫海报淘宝店推荐 编辑:程序博客网 时间:2024/06/05 04:22
PRTX SDK 5.0 C#开发实例教程一(登录)PRTX 介绍
安装
C#例子开发说明
登录窗口
//下面是加上网络选项。支持UDP,TCp以及代理登录。
开始登录
以下是点登录按扭的代码
点了登录后,就可以开始显示正在登录状态,通过调用定时器来显示动画。提示用户等待登录。
若需要本文例子相关源代码,请访问 http://www.webp2p.com/download/download.htm
PRTX 是快速即时通讯开发包,功能包括用户登录,文字聊天,好友列表,组织架构,图文发送,文件上传与下载,P2P语音,视频,文件传输,文字通讯等组件和例子,并支持服务器二次开发。
客户端组件由以下部分组成,
服务器组件由IMServer.exe和zhdb.ocx组成,其中zhdb.ocx可做服务器部分的自定义开发。
安装
安装请参考<<PRTX即时通讯SDK5.0.0_API>>
包括服务器安装和客户端组件安装。
C#例子开发说明
登录窗口
登录所用到的几个方法是:
1. Start_Up 初始化。
2. SetNetwork 设置服务器IP。
3. Login 开始登录。
服务器返回的事件是:
1. OnLoginReply 登录成功。
2. OnSysError 登录失败的错误码。
登录窗口分别放置了三个panel上,为了方便大家看到,我们把三个panel分开放,第一个panel是放置账户输入框txtName,密码输入框txtPass等控件,还有一个cboxLoginType,这个是ComboBox,用来选择用户登录、号码登录,或者Email登录等。
第二个panel放置了网络类型选择ComboBox,服务器IP,以及端口输入框,这个使用户在登录前可以设置需要登录的服务器或者代理服务器等。
其中UDP为不使用代理的UDP登录方式,TCP为不使用代理的TCP登录方式,SOCK5、SOCK4、HTTP分别为使用sock5、sock4、http代理方式。绝大部情况,无需要设代理即可登录。
以下是登录窗口加载的代码
private voidFrmLogin_Load(object sender, System.EventArgse)
{
//这是写日志文件方法,如果要写日志,请事先手工创建ClientLog.txt,否则不会写日志。
frm1.GetImx().Start_Up("C:\\ClientLog.txt");
//下面是加上网络选项。支持UDP,TCp以及代理登录。
cboxNetWorkType.Items.Add("UDP");
cboxNetWorkType.Items.Add("TCP");
cboxNetWorkType.Items.Add("SOCK5");
cboxNetWorkType.Items.Add("SOCK4");
cboxNetWorkType.Items.Add("HTTP代理");
cboxLoginType.SelectedIndex= 0;//用户号码登录
pnlNetworkPanel.Visible = false; //设网络面板默认不显示
pnlLoginIn.Visible = false;
}
Start_Up这个函数必须是zhim.ocx第一个调用函数。
登录过程,点登录按扭的事件。调用SetNetwork设置网络,并且调用Login来登录,如果登录成功将触发主窗Zhim.ocx的 OnLoginReply 事件,如果登录失败,将触发 OnSysError 事件,在OnSysError事件显示登录中的错误。比如密码错误,用户名不存在,用户过期等错误。
开始登录
以下是点登录按扭的代码
private voidbtnLogin_Click(object sender, System.EventArgse)
{
////这个frm1是主窗口,我们把Zhim.ocx放在主窗口中,只有主窗口完全退出,Zhim.ocx实例不存在了,程序也就会退出了。其它的窗口都通过frm1.GetImx()来获得对Zhim.ocx实例对像的调用。
frm1.GetImx().SetNetwork(txtSvrIP.Text,System.Convert.ToInt32(txtSvrPort.Text),"",0,"","",Constant.PROXY_NO);
//以下判断账户有效性
int loginType = cboxLoginType.SelectedIndex;
stringsName = txtName.Text;
stringsPass = txtPass.Text ;
int uId = 0;
if (sName.Length == 0)
{
MessageBox.Show("请输入账号!",Constant.sAppName );
return;
}
if(sPass.Length == 0)
{
MessageBox.Show("请输入密码!",Constant.sAppName );
}
if(loginType == 0) //号码登录
{
if(IsNumber(sName))
{
//是数字
uId = Convert.ToInt32(sName);
}
else
{
//不是数字,也可使用号码或者用户名或者Email登录
MessageBox.Show("账号必须全由数字组成!",Constant.sAppName );
}
}
//以下为使用号码或者用户名或者Email登录
if(loginType== 0)//号码登录
frm1.GetImx().Login( Constant.STATUS_ONLINE, uId,"","", sPass, "",0, 0, "CN", 0,"", 0);
if(loginType== 1)//用户名登录
frm1.GetImx().Login(Constant.STATUS_ONLINE, 0, sName,"", sPass, "",0, 0, "CN", 0, "", 0);
if(loginType== 2)//Email登录
frm1.GetImx().Login(Constant.STATUS_ONLINE, 0,"",sName, sPass, "", 0, 0, "CN", 0,"",0);
timer1.Enabled = true;
pnlLoginIn.Visible = true;
pnlNetworkPanel.Visible = false;
pnlUser.Visible = false;
}
点了登录后,就可以开始显示正在登录状态,通过调用定时器来显示动画。提示用户等待登录。
privatevoid timer1_Tick(objectsender, System.EventArgs e)
{
nTimerCount= nTimerCount + 1;
if (nTimerCount == 1)
lblSigningOn.Text= "登录中..";
if (nTimerCount == 2)
lblSigningOn.Text= "登录中....";
if (nTimerCount >= 3)
{
nTimerCount = 0;
lblSigningOn.Text= "登录中......";
}
}
登录成功或者失败
如果登录成功,会产生OnLoginReply事件,这个事件中,可以设定好用户目录,
privatevoid IMx_OnLoginReply(objectsender, AxZhIM2.__ZhIMx_OnLoginReplyEvent e)
{
lmsg("登录成功!");
//设定默认文件或者图片接收目录
IMx.PicRecvDir =System.IO.Path.GetDirectoryName(Application.ExecutablePath.ToString()) + "\\IShow\\" + IMx.UIN.ToString() + "\\Temp";
//如果目录不存在,就建立
if(!System.IO.Directory.Exists(IMx.PicRecvDir))
System.IO.Directory.CreateDirectory(IMx.PicRecvDir);
m_fmLogin.Close();//关了登录窗口
//显示用户名
lblMyNick.Text = IMx.sNick+ "[" + Convert.ToString(IMx.UIN) + "]";
//确认头像号在本地头像文件范围内,以免访问到非法图片。
if(IMx.nIconID >Constant.HEAD_NUM)
IMx.nIconID = Constant.HEAD_NUM;
if(IMx.nIconID<0 )
IMx.nIconID = 0;
//生成本地头像的图片文件路经
string sPath = System.Environment.CurrentDirectory+ Constant.PathHead + "\\Online\\" + Convert.ToString(IMx.nIconID)+ ".bmp";
pbMyHead.Image= new Bitmap(sPath); //头像显示
//设置离线上传URL
m_sUploadURL = "http://bbs.webp2p.com:8004/upload/getfile.php?user="+ IMx.UIN.ToString() + "&tempid="+ IMx.nTempID ;
//设置离线下载的根目录
IMx.DownloadURL = "http://bbs.webp2p.com:8004/upload/upfiles/";
//如果不是掉线后重新登录,就要获得我的好友列表
if (!m_bReLogin)
IMx.ReqContactList(IMx.nParentUIN, 0);//取下我的组织架构(IMx.nParentUIN为我的组织号,对应Friends表的GroupUIN号)和全部好友
//显示登录在线状态,比如在线,隐身等
if (IMx.nStatus == Constant.STATUS_ONLINE)
cboMyStatus.SelectedIndex= 0;
if (IMx.nStatus == Constant.STATUS_OFFLINE)
cboMyStatus.SelectedIndex= 3;
if (IMx.nStatus == Constant.STATUS_NA)
cboMyStatus.SelectedIndex= 2;
if (IMx.nStatus == Constant.STATUS_INVISIBLE)
cboMyStatus.SelectedIndex= 1;
}
如果登录不成功,则在OnSysError事件中显示错误信息
private voidIMx_OnSysError(object sender, AxZhIM2.__ZhIMx_OnSysErrorEvent e)
{
switch (e.nCode)
{
case Constant.E_ALLPACKAGE_TIME_OUT://掉线了,需要重新Start_Up,可以在这里做自动重登录。掉线后重试上线
if (IMx.UIN == 0) //如果还没有登录
{
m_fmLogin.SetLoginFail("登录超时!");
}
break;
case Constant.E_NO_UIN:
lmsg("登录时,如果用户输入的帐号不存在,会返回这个错误码。");
m_fmLogin.SetLoginFail("登录不成功,账户不存在。");
break;
case Constant.E_PWD:
lmsg("登录时,如果用户输入的密码不对,会返回这个错误码。");
m_fmLogin.SetLoginFail("登录不成功,密码不对");
break;
case Constant.E_EXPIRED:
lmsg("登录时,如果用户账户过期,会返回这个错误。");
m_fmLogin.SetLoginFail("登录不成功,用户账户过期");
break;
case Constant.E_LOGIN_FAIL:
lmsg("登录不成功,其它未知原因,一般不会出现这个错误码。");
m_fmLogin.SetLoginFail("登录不成功,其它未知原因");
break;
case Constant.E_LOW_VERSION:
lmsg("登录时,Login 的nLowVersion 这个参数,表示是客户端版本号,如果小于服务器上IMServer.ini配置的LimitVersion,则会返回这个错误码,表示客户端版本号过低,不允许登录。");
m_fmLogin.SetLoginFail("版本太低");
break;
case Constant.E_TIME_OUT:
lmsg("表示有包发送出错,包命令是" + e.nCmd);
if (e.nCmd == 18)
{
lmsg("登录包超时,无法登录,登录超时");
m_fmLogin.SetLoginFail("登录超时,检查服务器设置或者网络。");
}//else
// lmsg("其它的一般不需要处理。如果是网络不通,会出现E_ALLPACKAGE_TIME_OUT错误。所以只需要处理E_ALLPACKAGE_TIME_OUT");
break;
case Constant.E_USER_ALREADY_LOGIN:
lmsg("用户在其它地方登录,您将被迫下线。");
MessageBox.Show("用户在其它地方登录,您将被迫下线。",Constant.sAppName );
//在这里可以显示图标为下线状态。
lblMyNick.Text ="已经掉线";
cboMyStatus.SelectedIndex= 3;
break;
default:
lmsg("执行命令:" + e.nCmd + "时出现,未定义的错误" + e.nCode);
break;
}
}
- PRTX SDK 5.0 C#即时通讯IM开发实例教程一(登录)
- PRTX SDK 5.0 C#即时通讯IM开发实例教程一(登录)
- IM即时通讯 (一)
- xmpp开发IM即时通讯系列(一)--总述
- java 开发IM即时通讯客户端 --安装SWT插件(一)
- IM推送之客户端SDK开发(一)
- 即时通讯(IM)软件的开发
- 关于IM(即时通讯开发)技术问题
- Android-IM从零开始开发一个即时通讯项目
- IM(即时通讯)
- IM即时通讯
- IM/即时通讯
- 即时通讯IM
- 即时通讯(IM)
- 即时通讯-im
- 北京云丛网络科技有限公司 IM 即时通讯 SDK介绍
- Android 融云SDK-即时通讯IM(附源码)
- iOS 即时通讯 SDK开发包
- Struts2标签取值方式
- Flex客户端设置speex编码时Red5对音频数据的处理以及将speex解码
- 协方差矩阵
- http权威指南读书笔记(一)
- Sicily 1134 积木分发
- PRTX SDK 5.0 C#即时通讯IM开发实例教程一(登录)
- maven入门
- 【Android开发】事件类MotionEvent的一些认识
- 将单字节数字组装成字符串
- 只要是在公司“混”,此文对新人&旧人都有好处!
- UVA 152 - Tree's a Crowd
- Android 应用集成百度地图开发和注意事项
- http权威指南学习笔记(二)
- 教你更换Notepad++主题