我正在使用ejabberd服务器和smack 4.1.0 beta 2在android中开发一个聊天应用程序。在那里我想使用streammanagement(XEP-0198)。
在ejabberd http://www.process-one.net/docs/ejabberd/guide_en.pdf的安装和操作指南中,它指定默认启用流管理。但它在我的案例中并没有起作用。
所以我手动将streammanagement值设为true。但是当我调用issmavailable()方法时,仍然会返回false。
这是我的ejabberd.cfg代码,
listen,
[
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
zlib,
starttls,
{certfile, "/etc/ejabberd/ejabberd.pem"},
{stream_management,true}
]},
请帮助我..提前谢谢......
答案 0 :(得分:2)
对于在禁用XEP-0198的升级后来到这里的任何人:使用ejabberd 17.03,该选项被重命名,如果配置中根本不存在则被禁用。新选项名为public class ACOne extends AbstractClass
{
@Override
public void use(){System.out.println("Used item ACOne!");}
}
public class ACTwo extends AbstractClass
{
@Override
public void use(){System.out.println("Used item ACTwo!");}
}
public abstract class AbstractClass
{
public abstract void use();
}
public class UserClass
{
private AbstractClass item;
public UserClass (AbstractClass item)
{
this.item = item;
}
public Class<? extends AbstractClass> getItemClass()
{
return item.getClass();
}
public <T extends AbstractClass> T getItem (Class <? extends T> targetType)
{
return targetType.cast(this.item);
}
public void setItem (AbstractClass item)
{
this.item = item;
}
}
public class CastingSubclasses
{
public void testCastingSubclasses()
{
UserClass user = new UserClass(new ACOne());
user.setItem(new ACTwo());
user.getItem(user.getItemClass()).use();
}
}
答案 1 :(得分:1)
在ejabberd中,流管理是c2s监听器的一个选项。您应该将选项stream_management
设置为true
。
参考是:http://docs.ejabberd.im/admin/guide/configuration/#listening-ports
请注意,在最新的ejabberd版本中,默认启用流管理。