小编Mic*_*ond的帖子

将Smack与Android Studio项目集成,用于聊天应用程序

我正在尝试使用ejabberd服务器和smack库实现聊天信使,但很难整合所有的jar和smack的依赖.我正在使用android Studio.

我的build.gradle(模块):

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"

        defaultConfig {
            applicationId "com.example.nit.xmppclient"
            minSdkVersion 18
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:22.2.0'

        compile "org.igniterealtime.smack:smack-android:4.1.0"
        compile "org.igniterealtime.smack:smack-tcp:4.1.0"
        compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"

        compile 'org.ogce:xpp3:1.1.6'

    }
Run Code Online (Sandbox Code Playgroud)

首先我得到XMLpullparser错误然后我添加了xpp3.但是在我添加了xpp3后,我得到了

Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

的build.gradle(项目):

// Top-level build file where …
Run Code Online (Sandbox Code Playgroud)

android xmpp ejabberd smack asmack

19
推荐指数
1
解决办法
5910
查看次数

C++ 11:如何使用<random>设置种子

我正在运用随机库,C++ 11的新手.我写了以下最小程序:

#include <iostream>
#include <random>
using namespace std;
int main() {
    default_random_engine eng;
    uniform_real_distribution<double> urd(0, 1);
    cout << "Uniform [0, 1): " << urd(eng);
}
Run Code Online (Sandbox Code Playgroud)

当我反复运行它时,它每次都给出相同的输出:

>a
Uniform [0, 1): 0.131538
>a
Uniform [0, 1): 0.131538
>a
Uniform [0, 1): 0.131538
Run Code Online (Sandbox Code Playgroud)

我希望程序在每次调用时都设置不同的种子,这样每次都会生成一个不同的随机数.我知道随机提供了一个名为seed_seq的工具,但我发现它的解释(在cplusplus.com上)完全模糊不清:

http://www.cplusplus.com/reference/random/seed_seq/

我很感激有关如何让程序在每次调用时生成新种子的建议:越简单就越好.

我的平台:

random c++11

15
推荐指数
2
解决办法
1万
查看次数

ejabberd和推送通知

我已经使用XMPP在我的iOS和Android应用程序中集成了聊天系统.我在服务器端使用了ejabberd 2.聊天系统工作正常.我想在使用APNS和GCM的聊天中集成推送通知.如何向每条聊天消息发送推送通知?ejabberd 2有任何API或扩展可用于实现此功能吗?

帮助很高,

iphone xmpp ejabberd apple-push-notifications google-cloud-messaging

14
推荐指数
2
解决办法
9371
查看次数

如何使用Phoenix向特定套接字发送消息

我有一些验证套接字:

defmodule Test.UserSocket do
  use Phoenix.Socket

  ## Channels
  channel "user:*", Test.RoomChannel

  def connect(_params, socket) do
    case Phoenix.Token.verify(socket, "user",  _params["token"]) do
          {:ok, uid} ->
            {:ok, assign(socket, :user_id, uid)}
          {:error, _} ->
            :error
     end
  end

 def id(_socket), do: "user:#{_socket.assigns.user_id}"
end
Run Code Online (Sandbox Code Playgroud)

并在连接套接字后命名为 user:#id

从文档中我可以发送断开连接事件 Test.Endpoint.broadcast("users_socket:" <> user.id, "disconnect", %{})

问题:如何将自定义事件发送到套接字user:#id,它应该像是对特定套接字的推送通知.

我试过Test.Endpoint.broadcast "user:1", "new:msg", %{user: "SYSTEM", body: "iex"}但它不起作用,因为我无法在套接字上听"new:msg".

elixir phoenix-framework

10
推荐指数
1
解决办法
3074
查看次数

如何在Ejabberd之上开发自定义功能?

我正在开发一个实时聊天应用程序.经过一段时间的搜索,我发现Ejabberd和Erlang是个不错的选择.

问题是Ejabberd没有提供我需要的所有功能.我需要一些自定义功能,如基于位置的匹配和匿名登录.

那么如何在Ejabberd之上开发自定义功能呢?为它写模块?或开发另一个独立的服务器应用程序(网络或其他类型的服务器应用程序)与它进行交互?

更新:另一个问题是我们添加自定义功能/功能的方式应该是可扩展的.

erlang xmpp ejabberd

8
推荐指数
1
解决办法
3785
查看次数

发现MUC房间的成员作为占用者

作为一名乘员/成员,我需要通过ejabberd-14.x了解房间内的所有"成员"

我关注了http://xmpp.org/extensions/xep-0045.html#getmemberlist

我被禁止(401)跟随stanze - 需要管理员权限

<iq from='crone1@shakespeare.lit/desktop'
    id='member3'
    to='coven@chat.shakespeare.lit'
    type='get'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item affiliation='member'/>
  </query>
</iq>
Run Code Online (Sandbox Code Playgroud)

如果我改变

<query xmlns='http://jabber.org/protocol/muc#admin'> 
Run Code Online (Sandbox Code Playgroud)

从admin到用户命名空间,然后我得到状态代码501 - 功能未实现

你知道我怎样才能让一个房间的成员成为一个占有者或成员?

我不是此用例的管理员/主持人.

XEP-0045确实说:

注意:服务应该也应该将成员列表返回给仅限会员的房间中的任何占用者; 也就是说,当房间中的成员请求成员列表时,它不应该生成错误.此功能可以帮助客户显示所有现有成员,即使其中一些成员不在会议室中,例如帮助成员确定是否应邀请其他用户.服务应该允许任何成员检索成员列表,即使还不是占用者.

xmpp ejabberd xmppframework multiuserchat

8
推荐指数
1
解决办法
1074
查看次数

Phoenix/Elixir/Ejabberd - 响应已发送错误

我正在按照本指南将Ejabberd嵌入Phoenix应用程序(https://blog.process-one.net/embedding-ejabberd-into-an-elixir-phoenix-web-application/),我现在遇到错误它正在运行.

基本上,一切似乎工作正常,直到我导航到" http:// localhost:4000/ejabberd ",此时我收到以下错误:

[error] #PID <0.721.0>运行EjbrdTest.Endpoint终止服务器:localhost:4000(http)请求:GET/ejabberd**(退出)引发异常:**(Plug.Conn.AlreadySentError)响应是已发送(插件)lib/plug/conn.ex:428:Plug.Conn.resp/3(插件)lib/plug/conn.ex:415:Plug.Conn.send_resp/3(ejbrdTest)web/controllers/ejabberd_controller .ex:1:EjbrdTest.EjabberdController.phoenix_controller_pipeline/2(ejbrdTest)lib/phoenix/router.ex:265:EjbrdTest.Router.dispatch/2(ejbrdTest)web/router.ex:1:EjbrdTest.Router.do_call/2 (ejbrdTest)lib/ejbrdTest/endpoint.ex:1:EjbrdTest.Endpoint.phoenix_pipeline/1(ejbrdTest)lib/plug/debugger.ex:90:EjbrdTest.Endpoint."call(overridable 3)"/ 2(ejbrdTest)lib /phoenix/endpoint/render_errors.ex:34:EjbrdTest.Endpoint.call/2(插件)lib/plug/adapters/cowboy/handler.ex:15:Plug.Adapters.Cowboy.Handler.upgrade/4(cowboy)src/cowboy_protocol.erl:442 :: cowboy_protocol .execute/4

而不是用户列表,我在jumbotron中看到了这一点:

在线用户:<%=用户< - @users do%> <%=用户%>

<%end%>

我没有找到任何关于此的内容,任何想法?

谢谢.如果您需要更多信息,请告诉我.

elixir ejabberd phoenix-framework

8
推荐指数
2
解决办法
1655
查看次数

ejabberd:运行安装后脚本时出错

我正在尝试ejabberd在我的电脑上安装,但我一直收到此错误:

Error running Post Install Script
The installation may not have completed correctly
Run Code Online (Sandbox Code Playgroud)

xmpp ejabberd

7
推荐指数
1
解决办法
1417
查看次数

ejabberd MUC档案管理查询响应

我正在使用ejabberd 15.09,并为服务器配置中的每个MUC启用了存档管理,如下所示:

mod_mam:
    default: always
 mod_muc:
    ## host: "conference.@HOST@"
    access: muc
    access_create: muc_create
    access_persistent: muc_create
    access_admin: muc_admin
    default_room_options:
      mam: true
      persistent: true
      public: true
Run Code Online (Sandbox Code Playgroud)

此外,Ejabberd管理面板上的检查显示,在每条消息发送到MUC后,存档表中的元素数量会增加,因此消息将被存档.这将验证是否为会话启用了存档.

要从MUC查询服务器的邮件存档,我发送此iq数据包:

<iq type='set' id='testid1'>
      <query xmlns='urn:xmpp:mam:1'>
        <x xmlns='jabber:x:data' type='submit'>
           <field var='FORM_TYPE' type='hidden'>
               <value>urn:xmpp:mam:1</value>
           </field>
          <field var='with'>
             <value>testmyroomnow@conference.ip/</value>
          </field>
       </x>
      </query>
    </iq>
Run Code Online (Sandbox Code Playgroud)

从服务器收到的响应不包含任何消息.

<message from='user@ip' to='user@ip/Gajim'>
<fin xmlns='urn:xmpp:mam:0' complete='true'>
<set xmlns='http://jabber.org/protocol/rsm'>
<count>0</count>
</set>
</fin>
</message>
Run Code Online (Sandbox Code Playgroud)

此MUC已包含一些消息,但如上所述查询不返回任何消息.似乎xml节的格式不正确.发送会议JID的格式不正确或其他.

不知道该怎么办,因为我已经在使用最新版本的Ejabberd来支持MUC的存档.其他我在这里做的,我不知道如何从ejabberd服务器查询MUC存档.

xmpp archive ejabberd muc

7
推荐指数
1
解决办法
1290
查看次数

XMPP按最新消息查询归档

我正在阅读http://xmpp.org/extensions/xep-0313.html以查询Ejabberd以查找使用特定用户存档的邮件.

这是我发送的xml:

<iq type='get' id='get_archive_user1'>
 <query xmlns='urn:xmpp:mam:tmp'>
  <with>user1@localhost</with>
  <set xmlns='http://jabber.org/protocol/rsm'>
   <max>20</max>
  </set>
 </query>
</iq>
Run Code Online (Sandbox Code Playgroud)

我正确收到了前20封邮件.要再次请求我添加标签:

<after>(id in element "Last" from last request)</after>
Run Code Online (Sandbox Code Playgroud)

这也很好.我需要的是接收最后20条消息,而不是前20条消息.我怎样才能做到这一点?

xmpp ejabberd

6
推荐指数
2
解决办法
3645
查看次数