登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: [jopl] 注册新用户 -- 属性文件的 NewAccount := true 即可     [回主站]     [分站链接]
标题
[jopl] 注册新用户 -- 属性文件的 NewAccount := true 即可
clq
浏览(0) + 2008-11-21 10:50:27 发表 编辑

关键字:

[jopl] 注册新用户 -- 属性文件的 NewAccount := true 即可

--------------------------------------------------

代码参考:

unit uform_autoreg;

//自动注册,参考 TfrmLogin

interface

uses
Classes, Controls, StdCtrls,
StandardAuth, XMLTag, PrefController,//clq add for 注册新用户
Session, AnyQBase,
buttonFrame, ComCtrls, Menus, TntStdCtrls, ExtCtrls,
Windows, Messages, SysUtils, Variants, Graphics, Forms,
Dialogs;

type
Tform_autoreg = class(TForm)
labelInfo: TLabel;
procedure FormCreate(Sender: TObject);
private
procedure NewRegCallback(event: string; tag: TXMLTag);
{ Private declarations }
public
{ Public declarations }
regSession: TJabberSession;//clq add test
bNew:boolean;
end;

var
form_autoreg: Tform_autoreg;

implementation

uses
RiserWindow, Jabber1,
Login;

{$R *.dfm}

procedure Tform_autoreg.FormCreate(Sender: TObject);
var
//regSession: TJabberSession;
p: TJabberProfile;
auth: TStandardAuth;
//p := TJabberProfile
begin
bNew := false;
labelInfo.Caption := '正在自动注册... 手动登录请关闭此窗口.';

//inherited;

// Create a new profile
{
//pname := sProfileNew;

MainSession := TJabberSession.Create('');
auth := TStandardAuth.Create(MainSession);
MainSession.setAuthAgent(auth);

MainSession.Prefs.LoadProfiles();
if (MainSession.Prefs.Profiles.Count = 0) then
MainSession.Prefs.CreateProfile('Default Profile');

p := TJabberProfile(MainSession.Prefs.Profiles.Objects[0]);
p.ResolvedIP := '127.0.0.1';
p.ResolvedPort := 5222;

MainSession.ActivateProfile(0);

with MainSession.Profile do
begin
Server := '127.0.0.1';
Username := 't4';
password := '1';
Resource := 'anyq';
end;

//事件接收器
MainSession.RegisterCallback(NewRegCallback);


MainSession.Connect();
MainSession.CreateAccount;
exit;

//--------------------------------------------------
regSession := TJabberSession.Create('');
p := regSession.Prefs.CreateProfile('');//连接和建立新用户都是需要这个 profile 的
regSession.ActivateProfile(0);
regSession.Connect;
regSession.CreateAccount;
}
//--------------------------------------------------
regSession := TJabberSession.Create('');
auth := TStandardAuth.Create(regSession);
regSession.setAuthAgent(auth);

// regSession.Prefs.LoadProfiles();
if (regSession.Prefs.Profiles.Count = 0) then
regSession.Prefs.CreateProfile('Default Profile');

p := TJabberProfile(regSession.Prefs.Profiles.Objects[0]);
p.ResolvedIP := '127.0.0.1';
p.ResolvedPort := 5222;

NewSetProfile(p);

p.NewAccount := true;//表明自己是新用户,connect 时会自动注册的

regSession.ActivateProfile(0);

with regSession.Profile do
begin
Server := '127.0.0.1';
Username := 't8';
password := '1';
Resource := 'anyq';
end;

//事件接收器
//regSession.RegisterCallback(NewRegCallback);
regSession.RegisterCallback(NewRegCallback, '/session');
//参见//RegSession.RegisterCallback(SessionCallbackReg, '/session');


regSession.Connect();//连接成功后再注册
// regSession.CreateAccount;


end;

//procedure TfrmLogin.NewRegCallback(event: string; tag: TXMLTag; data: WideString);
procedure Tform_autoreg.NewRegCallback(event: string; tag: TXMLTag);
begin
//参见 _session.FireEvent('/session/regok', xml);
// we are getting something from the socket
if (event = '/session/regok') then
begin
//showmessage('注册成功.');
ShowRiserWindow(nil, '注册成功.', ico_info);
end
//连接成功
else if event = '/session/connected' then//好象这个才起作用
begin
//showmessage('注册成功!');
//ShowRiserWindow(nil, '注册成功!', ico_info);

//这个事件会发生两次,所以第一次时注册就行了
if bNew = false then
begin
bNew := true;
//regSession.CreateAccount;//连接成功后再注册
//参考 session.pas 函数 TJabberSession.StreamCallback 的
// if ((_register) or (_profile.NewAccount)) then begin 处
//如果这样调用的话将会发送两次注册信息导致回应事件也被调用两次,其实将 Profile 的
//属性 NewAccount 设置为 true 是会自动注册的
end;

end
else if event = '/session/authenticated' then//好象这个才起作用//其实是登录成功
begin
//showmessage('注册成功!');
ShowRiserWindow(nil, '注册成功!', ico_info);

labelInfo.Caption := '自动注册成功,准备登录...';

//清理对话//test//没有这个的话,程序将不能正常退出
regSession.UnRegisterCallback(0);
regSession.Disconnect;

//成功的话自动登录
self.ModalResult := mrok;
end
else
if (event = '/session/regerror') then
begin
//showmessage('注册失败.');
ShowRiserWindow(nil, '注册失败.', ico_info);
//showmessage(tag.xml);
//regSession.UnRegisterCallback(0);

//清理对话//test//没有这个的话,程序将不能正常退出//奇怪正常注册下也会报两次注册失败?
regSession.UnRegisterCallback(0);
regSession.Disconnect;

//成功的话自动登录
// self.ModalResult := mrCancel;
self.ModalResult := mrOK;//失败的话也要让它用账号登录,因为可能是已经注册过了的
end;
end;

end.


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1