- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有聊天室工作所以如果收件人是 All 或 ALL 它广播我有这个工作所以如果你的名字是'Sam'它发送它与“私有(private)消息:”文本我不知道如何检查用户名的花名册并将其私下发送给该用户..
我的代码是:
//
// # SimpleServer
//
// A simple chat server using Socket.IO, Express, and Async.
//
var http = require('http');
var path = require('path');
var async = require('async');
var socketio = require('socket.io');
var express = require('express');
//
// ## SimpleServer `SimpleServer(obj)`
//
// Creates a new instance of SimpleServer with the following options:
// * `port` - The HTTP port to listen on. If `process.env.PORT` is set, _it overrides this value_.
//
var router = express();
var server = http.createServer(router);
var io = socketio.listen(server);
router.use(express.static(path.resolve(__dirname, 'client')));
var messages = [];
var sockets = [];
var users = {};
io.on('connection', function (socket) {
messages.forEach(function (data) {
socket.emit('message', data);
});
sockets.push(socket);
socket.on('disconnect', function () {
sockets.splice(sockets.indexOf(socket), 1);
updateRoster();
});
// Message Received
socket.on('message', function (msg, recipient) {
var text = String(msg || '');
if (!text)
return;
messages.push(msg);
var messageType;
if (recipient != '' && recipient != ' ' && recipient != 'All' && recipient != 'all') {
messageType = "private";
} else {
messageType = "public";
}
socket.get('name', function (err, name) {
var data = {
messageType: messageType,
recipient: recipient,
name: name,
text: text
};
broadcastMessage('message', data);
messages.push(data);
});
});
socket.on('identify', function (name) {
socket.set('name', String(name || 'Anonymous'), function (err) {
updateRoster();
});
});
});
function updateRoster() {
async.map(
sockets,
function (socket, callback) {
socket.get('name', callback);
},
function (err, names) {
broadcast('roster', names);
}
);
}
function broadcastMessage(event, data) {
let counter = 0;
let senderSocket;
let recipientSocket;
if (data.messageType === "public"){
sockets.forEach(function (socket) {
socket.emit('message', data); // send msg to all users
});
} else {
sockets.forEach(function (socket) { //HELP
if (data.recipient === 'Sam')
socket.emit('message', );
/* var person = socket.get('name', callback);
if (data.recipient === person){ // if true, recipient exists
socket.emit('message', data);
counter++; // if counter === 0, no user with recipient name exists
recipientSocket = socket;
recipientSocket.emit('message', data);
// socket.emit('message', data); // send private msg to recipient
} */
//else if (data.name === socket.username){
// send msg to sender
//senderSocket = socket;
// senderSocket.emit(event, data);
//}
});
}
if (data.messageType === "private") {
//console.log("counter: " + counter);
//if (counter === 0){
// senderSocket.emit('userNotFound', data);
//} else {
//}
}
}
function broadcast(event, data) {
sockets.forEach(function (socket) {
socket.emit(event, data);
});
}
server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){
var addr = server.address();
console.log("Chat server listening at", addr.address + ":" + addr.port);
});
我的 html 和 angular.js 看起来像:
<!doctype html>
<html lang="en" ng-app>
<head>
<img src="bermanology-logo.png" alt="Bermanology">
<title>Chat Example</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/bootstrap-responsive.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<style>
body {
padding-top: 60px;
}
</style>
<script>
function ChatController($scope) {
var socket = io.connect();
$scope.messages = [];
$scope.roster = [];
$scope.name = '';
$scope.recipient = '';
$scope.text = '';
$scope.errorMessage = '';
$scope.usernameError = '';
$scope.nameIsUnique = false;
$scope.validateUserName = function(){
var counter = 0;
if ($scope.name != ''){
$scope.setName($scope.name);
for (var i = 0; i < $scope.roster.length; i++){
if ($scope.roster[i] === $scope.name){
counter++;
$scope.usernameError = "username already taken";
}
}
if (counter === 0){
$scope.nameIsUnique = true;
}
$scope.roster.push($scope.name);
socket.emit('identify', $scope.name);
}
}
socket.on('connect', function () {
$scope.setName();
});
socket.on('message', function (msgData) {
if (msgData.messageType == "private"){
msgData.text = "private message: " + msgData.text;
} else {
}
$scope.messages.push(msgData);
$scope.errorMessage = '';
$scope.$apply();
});
socket.on('userNotFound', function (data) {
console.log("user not found!");
$scope.errorMessage = "User '" + data.recipient + "' not found";
$scope.$apply();
});
socket.on('roster', function (names) {
$scope.roster = names;
$scope.$apply();
});
$scope.send = function send() {
socket.emit('message', $scope.text, $scope.recipient);
$scope.recipient = '';
$scope.text = '';
};
$scope.setName = function setName(name) {
socket.emit('identify', name);
};
}
</script>
</head>
<body>
<div class="container" ng-controller="ChatController">
<div class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="pull-right">
<a href="https://c9.io" class="brand">Cloud9 IDE</a>
</div>
</div>
</div>
<div class="page-header">
<h1>Chat Example</h1>
</div>
<div ng-show="!nameIsUnique">
<form ng-submit="validateUserName()">
<div class="span2" ng-bind="usernameError"></div>
<div class="span2"><input type="text" class="input-block-level" ng-model="name" placeholder="Your Name"></div>
<input type="submit" class="span2 btn btn-primary" value="Enter chat">
</form>
</div>
<div class="row" ng-show="nameIsUnique">
<div class="span3">
<ul class="nav nav-list well">
<li class="nav-header">Local Users</li>
<li ng-repeat="user in roster" ng-bind="user">
</li>
</ul>
</div>
<div class="span9">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th class="span2">User</th>
<th class="span2">Message To</th>
<th class="span7">Text</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="msg in messages">
<td class="span2" ng-bind="msg.name"></td>
<td class="span2" ng-bind="msg.recipient"></td>
<td class="span7" ng-bind="privateMsgInfo + msg.text"></td>
</tr>
</tbody>
</table>
<div class="row controls">
<form ng-submit="send()">
<div class="input-append span7">
<input type="text" class="span4" ng-model="recipient" placeholder="Recipient"><br>
<input type="text" class="span6" ng-model="text" placeholder="Message">
<input type="submit" class="span2 btn btn-primary" value="Send" ng-disabled="!text">
</div>
</form>
<div class="span6" ng-bind="errorMessage"></div>
</div>
</div>
</div>
</div>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/angular.min.js"></script>
</body>
</html>
请帮忙
最佳答案
代替
var sockets = [];
你应该使用
var sockets = {};
并映射用户名=>套接字,这样
sockets['fred']
将为您获取 fred 所在的套接字
关于Javascript 聊天室 : How to establish who im sending a message to?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030668/
Skype 如何在 imo.im 和 im+ 服务中工作?有什么猜测吗? 我认为只有3种方式: 为服务器上的每个连接客户端运行多个 Skype 客户端副本 为服务器上的每个客户端从 SkypeKit
目前我正在开发 XMPP Google talk 聊天应用程序。该应用程序运行良好,通过分析来自特定聊天客户端的传入数据包(消息),我得到发件人的用户名(电子邮件)为“xxx@public.talk.
概要 给定一个带有可变参数模板构造函数的类型,它将参数转发给一个实现类,是否可以限制使用 SFINAE 转发的类型? 细节 首先,考虑带有通用引用的构造函数的非可变参数情况。这里可以禁用通过 SFIN
一组人气很高的很火的聊天表情包又来啦,热门又很有趣的聊天表情哦,这组表情包的聊天使用频率也是超级的高的哦。
我刚刚阅读了以下命令: taskkill /f /im something.exe 我读到了 /f强制关闭任务,但是 /im 做什么?做? 最佳答案 它告诉 taskkill下一个参数somethin
我曾遇到过有关此主题的不同问题,但是,没有一个能消除我对通知服务器客户端 IM 应用程序客户端的最佳方法的疑虑。 问题:整个问题是如何通知客户端应用程序更新。我已经见过以下方法: 客户端不断检查更新:
我正在尝试这段代码: im = Image.open("myimage") colors = im.getcolors() print colors 它返回“无”。所以我尝试了这个: im = Ima
我为打印网页编写代码。我正在使用 javascript 打印网页,代码如下 function print() { window.print(); } 我在 Button 的 onclien
我正在为 android 编写一个 jabber messenger,我想查看潜在聊天伙伴的电话联系人列表;) 无法弄清楚如何获取联系人的特定属性。获取显示名称不是问题,问题在于获取 IM 用户名。
我有这个 php 代码,其中有很多 mysql_query 和 or die ( mysql_error() ) 我如何减少 mysql_query 或 or die ( mysql_error()
我需要从我的应用程序连接到 IMS apn。当我尝试连接到 IMS apn 时,它会在我的手机上连接和断开连接,即使在 kitkat 上使用彩信也会发生同样的情况。有人可以帮我解决这个问题吗?这是代码
我正在创建一个社交网络网站,我需要一个 IM/聊天解决方案。 对话只是一对一的,用户只能与他们的 friend 聊天(即 Facebook 聊天 - 没有 channel ,没有房间......)。
我不是专业的程序员,我更多的是在业务方面,真的有一段时间没有编码了。问题是我正计划为手机开发一项新的 IM 服务,并且想知道在您看来,我应该在此过程中使用哪些最佳编程语言(聘请具有这些知识的人!)。
目前我只是每 3 秒查询一次服务器,看看是否有任何使用 NSURLRequest 等的新消息。如果有,它会将它们保存到数据库中,如果没有,则发送 NSNotificationCenter 通知,然后等
我正在尝试创建一个 IM 机器人,但我无法找到必要的资源。 更新 Imified 存在一个问题,使 gtalk 机器人无法在线显示(并且没有响应),它现在可以正常工作,所以我要关闭它。 这个tutor
我们有几个分布式开发人员在几个项目上一起工作。我们一直在使用 Skype 与所有开发人员进行聊天,它工作正常,除了一件事: 它真的会破坏我们复制并粘贴到聊天中的任何代码——尤其是 Python 中的空
我是 QuickBlox 聊天新手.. 尝试使用 Javascript SDK。但这总是抛出 Uncaught ReferenceError: QB is not defined 不知道我错过了什么。
我尝试在 C:\Users[name]\AppData\Roaming\Skype 中查找,发现一个名为“chatsync”的文件夹,其中有一些神秘的文件夹,其中的文件以 .dat 结尾。我几乎可以肯
2G 和 3G 已经在少数国家停用,其他国家也将很快停用。 LTE 模块的 VoLTE 功能对于能够通过 4G 进行调用而无需 2G/3G 回退是必需的。 native SMS 可以通过 2G/3G
我正在尝试cv2.imshow我的图像进行透视变换。 但是,我的图像很大,所以我看不到全貌: 如何解决这个问题? 下面是我的代码: import cv2 import os import numpy
我是一名优秀的程序员,十分优秀!