Диалоги через WebSocket

324
18 января 2018, 22:25

Пытаюсь реализовать мгновенные сообщения через сокеты, проблема заключается в том, что любое написанное сообщение могут читать все. Подскажите, пожалуйста, как я могу отправить сообщение только определенному пользователю?

var URL = 'ws://localhost:8181';
var chatClient = null;
function connect(){
    chatClient = new WebSocket(URL);
    chatClient.onmessage = function (event) {
        var jsonObj = JSON.parse(event.data);
        var messagesArea = $("#messageTable");
        var trTable = document.createElement('tr');
        var tdTable = document.createElement('td');
        tdTable.className = 'message-from';
        var aTable = document.createElement('a');
        aTable.className = 'angled-img';
        var adivTable = document.createElement('div');
        adivTable.className = 'img';
        adivTable.style = 'width:40px; margin-left:-10px;';
        adivTable.innerHTML = '<img src="'+jsonObj.userPic+'">';
        var spanTable = document.createElement('span');
        spanTable.className = 'message-from-name';
        //spanTable.style = 'margin-left:-60px;';
        spanTable.innerHtml = '<?=$accinfo['username'];?>';
        var spanDataTable = document.createElement('span');
        spanDataTable.className = 'date';
        //spanDataTable.style = 'margin-left:-60px;';
        spanDataTable.innerHTML = '<?=$date?>';  
        var tdDescriptTable = document.createElement('td');
        tdDescriptTable.className = 'message-description';
        var msgDescriptTable = document.createElement('div');
        msgDescriptTable.className = 'message-excerpt';
        msgDescriptTable.innerHTML = jsonObj.message;
        var tdActionTable = document.createElement('td');
        tdActionTable.className = 'message-action';
        var actTable = document.createElement('a');
        actTable.className = 'message-delete';
        var iTable = document.createElement('i');
        iTable.className = 'fa fa-times';
        trTable.appendChild(tdTable);
        tdTable.appendChild(aTable);
        aTable.appendChild(adivTable);
        tdTable.appendChild(spanTable);
        tdTable.appendChild(spanDataTable);
        tdTable.appendChild(tdDescriptTable);
        tdDescriptTable.appendChild(msgDescriptTable);
        trTable.appendChild(tdActionTable);
        tdActionTable.appendChild(actTable);
        actTable.appendChild(iTable);
        messagesArea.append(trTable);
        $(".comments-block").animate({scrollTop: $(".comments-block")[0].scrollHeight}, -500);  
    };
}
connect();
function sendMessage() {
    var convId = $("#conversation_id").val();
    var usrfromId = $("#user_from").val();
    var usrtoId = $("#user_to").val();
    var userPic = '<?=$usrPhoto?>';
    var inputElement = $("#mess").val();
    if (inputElement !== "") {
        var jsonObj = {"convId" : convId, "usrfromId" : usrfromId, "usrtoId" : usrtoId, "message" : inputElement, "userPic" : userPic};
        chatClient.send(JSON.stringify(jsonObj));
    }
}
function disconnect () {
    chatClient.close();
}

C#

class Server
        {
            static readonly List<IWebSocketConnection> allSockets = new List<IWebSocketConnection>();
            static readonly WebSocketServer server = new WebSocketServer("ws://0.0.0.0:8181");
            static void Main()
            {
                FleckLog.Level = LogLevel.Debug;
                server.Start(socket =>
                {
                    socket.OnOpen = () =>
                    {
                        Console.WriteLine("Open!");
                        allSockets.Add(socket);
                    };
                    socket.OnClose = () =>
                    {
                        Console.WriteLine("Close!");
                        allSockets.Remove(socket);
                    };
                    socket.OnMessage = message =>
                    {
                        Console.WriteLine(message);
                        allSockets.ToList().ForEach(s => s.Send(message));
                    };
                });

                var input = Console.ReadLine();
                while (input != "exit")
                {
                    foreach (var socket in allSockets.ToList())
                    {
                        socket.Send(input);
                    }
                    input = Console.ReadLine();
                }
            }
            static void SendToSocketById(String input, Guid id)
            {
                var socket = allSockets.Find(client => client.ConnectionInfo.Id == id);
                socket.Send(input);
            }
        }
READ ALSO
NodeJS - настройка live reload

NodeJS - настройка live reload

Вопрос - как настроить сервер на NodeJS, чтобы при изменении моделей, контроллеров и других файлов приложение, изменения сразу вступали в силу,...

287
Почему невозможно засэтить margin для yandex карты

Почему невозможно засэтить margin для yandex карты

Как сделать чтобы отступы margin-bottom был динамический? Возможно ли прописать это в Yandex API ? Или как можно написать другой скрипт чтобы решить...

288
panto и drag в google map js V3

panto и drag в google map js V3

Добрый день

324
Есть ли какие-нибудь сервисы для практики языков программирования,наподобии CodeWars? [требует правки]

Есть ли какие-нибудь сервисы для практики языков программирования,наподобии CodeWars? [требует правки]

Есть ли какие-нибудь сервисы для практики языков программирования,наподобии CodeWars?

279