[mirotalksfu] - add send private message

هذا الالتزام موجود في:
Miroslav Pejic
2021-11-15 11:55:14 +01:00
الأصل 6480c96611
التزام 7ea39e9ecf
5 ملفات معدلة مع 59 إضافات و11 حذوفات

عرض الملف

@@ -470,10 +470,11 @@ io.on('connection', (socket) => {
socket.on('message', (data) => { socket.on('message', (data) => {
log.debug('message', data); log.debug('message', data);
roomList.get(socket.room_id).broadCast(socket.id, 'message', { if (data.to_peer_id == 'all') {
peer_name: data.peer_name, roomList.get(socket.room_id).broadCast(socket.id, 'message', data);
peer_msg: data.peer_msg, } else {
}); roomList.get(socket.room_id).sendTo(data.to_peer_id, 'message', data);
}
}); });
socket.on('disconnect', () => { socket.on('disconnect', () => {

عرض الملف

@@ -43,6 +43,7 @@
--wb-bg: linear-gradient(to left, #1f1e1e, #000000); --wb-bg: linear-gradient(to left, #1f1e1e, #000000);
--left-msg-bg: #222328; --left-msg-bg: #222328;
--right-msg-bg: #0a0b0c; --right-msg-bg: #0a0b0c;
--private-msg-bg: #510717;
--box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); --box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
--btns-hover-scale: scale(1.1); --btns-hover-scale: scale(1.1);
/* buttons bar horizontal */ /* buttons bar horizontal */
@@ -334,7 +335,7 @@ body {
color: #fff; color: #fff;
} }
.left-msg .private-msg-bubble { .left-msg .msg-bubble-private {
background: var(--private-msg-bg); background: var(--private-msg-bg);
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
color: #fff; color: #fff;
@@ -354,7 +355,7 @@ body {
color: #fff; color: #fff;
} }
.right-msg .private-msg-bubble { .right-msg .msg-bubble-private {
background: var(--private-msg-bg); background: var(--private-msg-bg);
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
color: #fff; color: #fff;
@@ -377,6 +378,7 @@ body {
background-size: cover; background-size: cover;
} }
.msg-bubble-private,
.msg-bubble { .msg-bubble {
max-width: 200px; max-width: 200px;
padding: 15px; padding: 15px;

ثنائية
public/images/message.png Normal file

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 7.4 KiB

عرض الملف

@@ -21,6 +21,7 @@ const _PEER = {
lowerHand: '', lowerHand: '',
ejectPeer: '<i class="fas fa-times"></i>', ejectPeer: '<i class="fas fa-times"></i>',
sendFile: '<i class="fas fa-upload"></i>', sendFile: '<i class="fas fa-upload"></i>',
sendMsg: '<i class="fas fa-paper-plane"></i>',
}; };
let participantsCount = 0; let participantsCount = 0;
@@ -1367,6 +1368,7 @@ async function getParticipantsTable(peers) {
<th></th> <th></th>
<th></th> <th></th>
<th></th> <th></th>
<th></th>
</tr>`; </tr>`;
table += ` table += `
@@ -1376,6 +1378,7 @@ async function getParticipantsTable(peers) {
<td><button id="hideAllButton" onclick="rc.peerAction('me','${rc.peer_id}','hide',true,true)">${_PEER.videoOff}</button></td> <td><button id="hideAllButton" onclick="rc.peerAction('me','${rc.peer_id}','hide',true,true)">${_PEER.videoOff}</button></td>
<td></td> <td></td>
<td><button id="sendAllButton" onclick="rc.selectFileToShare('${rc.peer_id}')">${_PEER.sendFile}</button></td> <td><button id="sendAllButton" onclick="rc.selectFileToShare('${rc.peer_id}')">${_PEER.sendFile}</button></td>
<td><button id="sendMessageToAll" onclick="rc.sendMessageTo('all')">${_PEER.sendMsg}</button></td>
<td><button id="ejectAllButton" onclick="rc.peerAction('me','${rc.peer_id}','eject',true,true)">${_PEER.ejectPeer}</button></td> <td><button id="ejectAllButton" onclick="rc.peerAction('me','${rc.peer_id}','eject',true,true)">${_PEER.ejectPeer}</button></td>
</tr> </tr>
`; `;
@@ -1388,6 +1391,7 @@ async function getParticipantsTable(peers) {
let peer_hand = peer_info.peer_hand ? _PEER.raiseHand : _PEER.lowerHand; let peer_hand = peer_info.peer_hand ? _PEER.raiseHand : _PEER.lowerHand;
let peer_eject = _PEER.ejectPeer; let peer_eject = _PEER.ejectPeer;
let peer_sendFile = _PEER.sendFile; let peer_sendFile = _PEER.sendFile;
let peer_sendMsg = _PEER.sendMsg;
let peer_id = peer_info.peer_id; let peer_id = peer_info.peer_id;
if (rc.peer_id === peer_id) { if (rc.peer_id === peer_id) {
table += ` table += `
@@ -1398,6 +1402,7 @@ async function getParticipantsTable(peers) {
<td><button>${peer_hand}</button></td> <td><button>${peer_hand}</button></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
</tr> </tr>
`; `;
} else { } else {
@@ -1408,6 +1413,7 @@ async function getParticipantsTable(peers) {
<td><button id='${peer_id}___pVideo' onclick="rc.peerAction('me',this.id,'hide')">${peer_video}</button></td> <td><button id='${peer_id}___pVideo' onclick="rc.peerAction('me',this.id,'hide')">${peer_video}</button></td>
<td><button>${peer_hand}</button></td> <td><button>${peer_hand}</button></td>
<td><button id='${peer_id}' onclick="rc.selectFileToShare(this.id, false)">${peer_sendFile}</button></td> <td><button id='${peer_id}' onclick="rc.selectFileToShare(this.id, false)">${peer_sendFile}</button></td>
<td><button id="sendMessageTo" onclick="rc.sendMessageTo('${peer_id}')">${peer_sendMsg}</button></td>
<td><button id='${peer_id}___pEject' onclick="rc.peerAction('me',this.id,'eject')">${peer_eject}</button></td> <td><button id='${peer_id}___pEject' onclick="rc.peerAction('me',this.id,'eject')">${peer_eject}</button></td>
</tr> </tr>
`; `;

عرض الملف

@@ -21,6 +21,7 @@ const image = {
users: '../images/participants.png', users: '../images/participants.png',
user: '../images/participant.png', user: '../images/participant.png',
youtube: '../images/youtube.png', youtube: '../images/youtube.png',
message: '../images/message.png',
}; };
const mediaType = { const mediaType = {
@@ -1437,19 +1438,55 @@ class RoomClient {
if (!peer_msg) return; if (!peer_msg) return;
let data = { let data = {
peer_name: this.peer_name, peer_name: this.peer_name,
to_peer_id: 'all',
peer_msg: peer_msg, peer_msg: peer_msg,
}; };
console.log('Send message:', data); console.log('Send message:', data);
this.socket.emit('message', data); this.socket.emit('message', data);
this.setMsgAvatar('right', this.peer_name); this.setMsgAvatar('right', this.peer_name);
this.appendMessage('right', this.rightMsgAvatar, this.peer_name, peer_msg); this.appendMessage('right', this.rightMsgAvatar, this.peer_name, peer_msg, 'all');
chatMessage.value = ''; chatMessage.value = '';
} }
sendMessageTo(to_peer_id) {
if (!this.thereIsParticipants()) {
chatMessage.value = '';
this.userLog('info', 'No participants in the room expect you', 'top-end');
return;
}
Swal.fire({
background: swalBackground,
position: 'center',
imageUrl: image.message,
input: 'text',
inputPlaceholder: '💬 Enter your message...',
showCancelButton: true,
confirmButtonText: `Send`,
showClass: {
popup: 'animate__animated animate__fadeInDown',
},
hideClass: {
popup: 'animate__animated animate__fadeOutUp',
},
}).then((result) => {
let peer_msg = this.formatMsg(result.value);
if (!peer_msg) return;
let data = {
peer_name: this.peer_name,
to_peer_id: to_peer_id,
peer_msg: peer_msg,
};
console.log('Send message:', data);
this.socket.emit('message', data);
this.setMsgAvatar('right', this.peer_name);
this.appendMessage('right', this.rightMsgAvatar, this.peer_name, peer_msg, to_peer_id);
});
}
showMessage(data) { showMessage(data) {
if (!this.isChatOpen) this.toggleChat(); if (!this.isChatOpen) this.toggleChat();
this.setMsgAvatar('left', data.peer_name); this.setMsgAvatar('left', data.peer_name);
this.appendMessage('left', this.leftMsgAvatar, data.peer_name, data.peer_msg); this.appendMessage('left', this.leftMsgAvatar, data.peer_name, data.peer_msg, data.to_peer_id);
this.sound('message'); this.sound('message');
} }
@@ -1458,17 +1495,19 @@ class RoomClient {
avatar === 'left' ? (this.leftMsgAvatar = avatarImg) : (this.rightMsgAvatar = avatarImg); avatar === 'left' ? (this.leftMsgAvatar = avatarImg) : (this.rightMsgAvatar = avatarImg);
} }
appendMessage(side, img, from, msg) { appendMessage(side, img, from, msg, to) {
let time = this.getTimeNow(); let time = this.getTimeNow();
let msgBubble = to == 'all' ? 'msg-bubble' : 'msg-bubble-private';
let message = to == 'all' ? msg : msg + '<br/> (private message)';
let msgHTML = ` let msgHTML = `
<div class="msg ${side}-msg"> <div class="msg ${side}-msg">
<div class="msg-img" style="background-image: url('${img}')"></div> <div class="msg-img" style="background-image: url('${img}')"></div>
<div class="msg-bubble"> <div class=${msgBubble}>
<div class="msg-info"> <div class="msg-info">
<div class="msg-info-name">${from}</div> <div class="msg-info-name">${from}</div>
<div class="msg-info-time">${time}</div> <div class="msg-info-time">${time}</div>
</div> </div>
<div class="msg-text">${msg}</div> <div class="msg-text">${message}</div>
</div> </div>
</div> </div>
`; `;