Spark注册信息的XML TAG&NAMESPACE : <query xmlns="jabber:iq:register">
=====================================
spark启动后,运行LoginDialog类,LoginDialog.....注册按钮创建注册Panel:AccountCreationWizard. AccountCreationWizard的“创建账号”按钮监听事件 执行createAccount()方法,此方法首先做一些简单验证,然后创建一个SwingWorker实例,在SwingWorker中调用AccountManager.createAccount(username, password)[spark注册比较简化版,只提供了这2条字段信息 ]。
AccountManager(smark.jar)注册流程:
1,调用supportsAccountCreation(),检查是否支持注册,以及注册需要哪些字段,通过发包(Registration extends IQ)确认IQ.TYPE=GET:
<iq id="NI4W1-5" to="zzypc" type="get" from="zzypc/572dba43">
<query xmlns="jabber:iq:register"/>
</iq>
服务器端(IQRegisterHandler)会返回是否允许注册,和需要的字段情况:
<iq type="result" id="NI4W1-19" from="zzypc">
<query xmlns="jabber:iq:register">
<username/>
<password/>
<email/>
<name/>
<x xmlns="jabber:x:data" type="form">
<title>XMPP Client Registration</title>
<instructions>Please provide the following information</instructions>
<field var="FORM_TYPE" type="hidden">
<value>jabber:iq:register</value>
</field>
<field label="Username" var="username" type="text-single">
<required/>
</field>
<field label="Full name" var="name" type="text-single"/>
<field label="Email" var="email" type="text-single"/>
<field label="Password" var="password" type="text-private">
<required/>
</field>
</x>
</query>
</iq>
2,当可以注册时,spark将需要提供的注册信息(服务器端发过来的,上面的包信息),填充到注册类(spark并没有这样做,仅提供了username, password,其他服务器端需要的注册信息都填充成了空字符串,代码:
for (String attributeName : getAccountAttributes()) {
attributes.put(attributeName, "");
}),
然后再次发生注册信息(Registration extends IQ),IQ.TYPE=SET.
<iq id="NI4W1-6" to="zzypc" type="set" from="zzypc/572dba43">
<query xmlns="jabber:iq:register">
<username>xxxxxxxxxxxxx</username>
<email/>
<name/>
<password>xxxxxxxxxxxxx</password>
</query>
</iq>
,服务器端接收后开始注册。
=============================================
服务器端程序通过IQRegisterHandler处理
===========================
如果需要扩展注册时提供的其他数据,扩展点:
1,客户端:
1.1,AccountCreationWizard(Panel)中多增加几个FIELD
1.2,AccountCreationWizard.createAccount()中SwingWorker worker调用AccountManager,createAccount(getUsername(), getPassword()),应该修改成调用AccountManager.createAccount(String username, String password, Map<String, String> attributes)
2,服务器端:
2.1,IQRegisterHandler.initialize()方法时,增加probeResult(Element)需要的字段信息。
2.2, IQ.Type.get/set 时,简单修改