2017-04-12 71 views
2

我尝试使用韵律进行会议聊天,对于客户端,我使用strophe.js。一切都很好,除了聊天历史记录显示给用户的一件事,当他们加入房间时并不完整。例如: 一个客户端已发送的邮件的房间是这样的:Prosody muc聊天记录不完整

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

但是,当新的客户加入到房间里,他们只得到的消息是这样的:

1 
3 
5 
7 
9 

我试着在语义配置中设置max_history_messages = 10,并从客户端设置maxstanzas = 10。但仍然如此。

这里是我的配置文件

admins = { "[email protected]" } 
modules_enabled = { 
     "message_logging"; 
     "roster"; 
     "saslauth"; 
     "tls"; 
     "dialback"; 
     "disco"; 

     "private"; 
     "vcard"; 

     "version"; 
     "uptime"; 
     "time"; 
     "ping"; 
     "pep"; 
     "register"; 

     "admin_adhoc"; 
     "admin_telnet"; 

     "bosh"; 

     "posix"; 
}; 

bosh_ports = { 5280 } 
bosh_max_inactivity = 60 
consider_bosh_secure = true 
cross_domain_bosh = true 
http_paths = { 
     bosh = "/http-bind"; -- Serve BOSH at /http-bind 
     files = "/"; -- Serve files from the base URL 
    } 

allow_registration = true; 

daemonize = true; 

pidfile = "/var/run/prosody/prosody.pid"; 

ssl = { 
    key = "/etc/prosody/certs/localhost.key"; 
    certificate = "/etc/prosody/certs/localhost.crt"; 
} 

c2s_require_encryption = false 

s2s_secure_auth = false 

authentication = "internal_plain" 

log = { 
    info = "/var/log/prosody/prosody.log"; 
    error = "/var/log/prosody/prosody.err"; 
    { levels = { "error" }; to = "syslog"; }; 
} 

VirtualHost "localhost" 
    enabled = true -- Remove this line to enable this host 
    ssl = { 
     key = "/etc/prosody/certs/localhost.key"; 
     certificate = "/etc/prosody/certs/localhost.crt"; 
    } 

Component "conference.localhost" "muc" 
    restrict_room_creation = true 
    max_history_messages = 10 

Include "conf.d/*.cfg.lua" 

有什么需要配置设置?

以下是我在Strophe.js处理消息:

function onLoginComplete(status) { 
    console.log(status); 
    if (status == Strophe.Status.CONNECTING) { 
     console.log('Strophe is connecting.'); 
    } else if (status == Strophe.Status.CONNFAIL) { 
     console.log('Strophe failed to connect.'); 
    } else if (status == Strophe.Status.DISCONNECTING) { 
     console.log('Strophe is disconnecting.'); 
    } else if (status == Strophe.Status.DISCONNECTED) { 
     console.log('Strophe is disconnected.'); 
    } else if (status == Strophe.Status.CONNECTED) { 
     console.log('Strophe is connected.'); 
     connection.addHandler(onMessage, null, 'message', null, null, null); 

    if (!chat_room) { 
     // join to chatroom 
    } 
} 

/** 
* on new message handler 
**/ 
function onMessage(message) { 
    console.log(message); 
    var type = $(message).attr('type'); 
    var body = $(message).find('body').text(); 
    switch (type) { 
    case 'groupchat': 
     console.log(body); 
     // todo append message to the list 
     appendMessage(message); 
     break; 
    } 
    return true; 
} 

这里是历史的一个消息时,用户只需加入房间:

<message xmlns="jabber:client" type="groupchat"  to="[email protected]/edff55f2-2980-4d01-bf65-0d2c0b011845"  from="[email protected]/subkhan"><body>8</body><delay xmlns="urn:xmpp:delay" stamp="2017-04-12T02:54:48Z"></delay><x xmlns="jabber:x:delay" stamp="20170412T02:54:48"></x></message> 

有什么做的延迟?

预先感谢您。

回答

0

原来,所有这一次,客户端已经获取了所有完整的消息历史记录,除了它变为rawInput(data),而不是onMessage()处理程序。所以我只是删除处理程序,并通过rawInput(data)处理传入的消息。