- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果问题可能过于宽泛,我深表歉意,因为我是 XMPP 的新手。
我正在开发 Angular6 应用程序并希望在其中集成 Jabber 聊天。我在谷歌上搜索了很多,但似乎没有找到任何明确的答案。
显然 strophe.js 看起来很有前途,但我找不到任何关于如何将它集成到 Angular5/6 项目中的文档。
任何提示将不胜感激
谢谢
最佳答案
嗯,我找到了xmpp-bosh-client和 ngx-chat .
第一个至少有记录。第二个不是,但我可以查看来源。
也许这可以帮助其他和我有同样经历的人。
谢谢
附言如果有人知道更好的东西,他/她是最受欢迎的
我正在发布一些代码片段,说明我如何在 TypeScript/Angular (6.x) 前端中使用 strophe.js 连接到 eJabberd(本地)服务器。
聊天面板.service.ts
import { Injectable } from '@angular/core';
import { Strophe, $pres } from 'strophe.js';
import { EJABBERD } from 'app/api/api.module';
var chatPanelServiceInstance: any = null;
@Injectable()
export class ChatPanelService
{
contacts: any[];
chats: any[];
user: any;
client: any;
// Private
private _xmppConnectionsString: String = "ws://" + EJABBERD.host + ":5280/ws"; // WebSockets
//private _xmppConnectionsString: String = "http://" + EJABBERD.host + ":5280/bosh"; // BOSH
private _xmppConnection: any = null;
/**
* Constructor
*
* @param {HttpClient} _httpClient
*/
constructor(
)
{
chatPanelServiceInstance = this;
Strophe.log = (level: any, msg: string) => { console.log(level + ": " + msg); };
}
/**
* Log into eJabberd
*
* @param {string} jid user name
* @param {string} password password (actually, the user token)
*/
login(jid: string, password: string): void
{
if ( ! this._xmppConnection ) {
this._xmppConnection = new Strophe.Connection( this._xmppConnectionsString , {'keepalive': true});
}
// this._xmppConnection.rawInput = (data: any) => {console.log("RAW IN: " + data)};
// this._xmppConnection.rawOutput = (data: any) => {console.log("RAW OUT: " + data)};
this._xmppConnection.connect(jid+'@'+EJABBERD.host, password, this._onConnect);
}
/**
* Disconnect from eJabberd
*/
logOut(): void
{
if ( this._xmppConnection ) {
this._xmppConnection.options.sync = true;
this._xmppConnection.flush();
this._xmppConnection.disconnect("logout");
this._xmppConnection = null;
}
}
/**
* eJabberd XMPP message Handler
* @param {string} msg Message received
*/
private _onMessage(msg: any): boolean
{
console.log(msg);
return true;
}
/**
* eJabberd connection Handler
* @param {any} status connection result
*/
private _onConnect(status: any): void
{
switch (status) {
case Strophe.Status.CONNECTING:
console.log("Connecting to eJabberd...");
break;
case Strophe.Status.CONNFAIL:
console.log("eJabberd connection failed!");
break;
case Strophe.Status.DISCONNECTING:
console.log("Disconnecting from eJabberd...");
break;
case Strophe.Status.DISCONNECTED:
console.log("Disconnected from eJabberd");
break;
case Strophe.Status.CONNECTED:
// We could have used 'this' instead of an external pointer (chatPanelServiceInstance),
// but the compiler is getting the meaning of 'this' wrong since strophe.js is not a native TypeScript library.
// This means that at run time 'this' doesn't point the service instance, rather to the connection itself.
// In order to avoid confusion I've chosen to use an explicit pointer to the service.
//
chatPanelServiceInstance._xmppConnection.addHandler(chatPanelServiceInstance._onMessage, null, 'message');
//Setting our presence in the server so that everyone can know that we are online
chatPanelServiceInstance._xmppConnection.send($pres().tree());
console.log("eJabberd connected!");
break;
case Strophe.Status.AUTHENTICATING:
console.log("eJabberd authenticating...");
break;
case Strophe.Status.AUTHFAIL:
console.log("eJabberd authentication failed!");
break;
case Strophe.Status.ERROR:
console.log("eJabberd generic connection error!");
break;
case Strophe.Status.ATTACHED:
console.log("eJabberd connection attached!");
break;
case Strophe.Status.REDIRECT:
console.log("eJabberd connection redirected!");
break;
case Strophe.Status.CONNTIMEOUT:
console.log("eJabberd connection timeout!");
break;
default:
console.log("eJabberd: Unknow connection status");
}
}
相关要点:
npm install --save strophe.js
关于angular - angular5 中 XMPP Web 客户端的起点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51602357/
有没有办法让我的浏览器告诉我当我点击一个 div 时执行的第一个 JavaScript 是什么。 让我分解一下: 代码示例: Hi There jQuery('hello').bind('clic
我在一个二维网格迷宫中,你只能水平和垂直移动。边成本为 1,我使用曼哈顿距离来估计从节点到目标的距离。 我的问题是,如果您从当前节点开始寻找到达目标的路径,或者从目标节点开始并找到返回当前节点的路径,
我的 View 中有两个 SeekBar,我在布局中类似地声明了它们: 这是我使用它们的代码: SeekBar sb = (SeekBar) v.findViewByI
我想将 TDD 应用于我的 Java EE 应用程序。 要求是创建一家具有名称和联系方式的公司。系统的入口点是Rest和Web服务,取决于客户端。 我正在努力寻找编写单元测试的起点。 我应该从无状态的
我想知道如何改变popUpMenu的原点,在底部应用栏正上方启动弹出窗口,无论项目数如何。与屏幕右端对齐。类似的东西(例如) Positioned(right: 0, bottom: bottomAp
我已经阅读了大量文章,看过大量关于 TDD 的截屏视频,但我仍在努力在实际项目中使用它。我的主要问题是我不知道从哪里开始,第一个应该是什么测试。 假设我必须编写调用外部系统方法(例如通知)的客户端库。
我确实在这个网站上进行了一些谷歌搜索,但没有找到我想要的东西。 我希望有人能在这里为我指出正确的方向。我是一名 ASP.NET/SQL Server 开发人员,希望开发一个(最初)基本社交网站 (ga
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
google了一下,没有找到任何东西。 有什么好的资源可以帮助我开始为严重依赖 API key 的 RESTless Web 应用程序设计后端。 我知道如何编写不稳定的网络服务等,只是从未使用过 AP
这是我的代码的一部分 string line; ifstream file ("Names.txt"); int i; for (i = 0; i < line.length(); ++i) {
我已经尝试创建路线,但我不确定如何事先获取从起点到目的地的所有纬度和经度。在这里,当我在 map 中搜索从起点到终点的路线时,我选择了一条我选择的路线,我想获得从起点到终点的所有经纬度。我必须将这些数
我正在尝试让宇宙飞船绕行星运行。我目前正在做 let playerPos = player.position let planetPos = planet.position let radius =
Java 中有一个 forloop,我可以在其中判断从哪里开始和从哪里结束: for(int i=10;i{{ athlete.name }} {% endfor %} {{forloop.last=
我正在尝试探索 dot net 核心功能以更好地理解它,因为我执行了同样的操作 dotnet new dotnet build dotnet run 命令提示符窗口中的命令,它为我创建了一个项目并创建
我正在使用 HTML5 Canvas 和 JavaScript 开发一款游戏。这是一款简单的太空射击游戏,屏幕中央有一门大炮。我可以旋转大炮并以与大炮方向相同的 Angular 发射导弹。 但我有一个
我正在尝试通过在 JavaFX 应用程序中使用凹槽、脊线边框样式来获得 3d 外观。但它正在向我展示 Unsupported 'groove' while parsing '-fx-border-s
我正在尝试从 mapr fs origin 进行简单的数据移动到 mapr fs destination (这不是我的用例,只是为了测试目的做这个简单的 Action )。尝试 validate 时这
我是一名优秀的程序员,十分优秀!