Перейти к содержанию
Авторизация  
CalypsoToolz

nodejs чат

Рекомендуемые сообщения

Приветствую всех! Нуждаюсь в помощи, т.к. в node чет вообще никак, в общем есть серверная и клиентская (веб) часть, с клиента, посредством чата отсылается сообщение, сервер обрабатывает его и отсылает обратно к клиентам уже в специальное окно (ну по крайней мере так должно быть :) )

 

Серверный код ( должен отсылать на клиент):

function Chat(sender, message) {
    this.sender = sender;
    this.message = message;
}

module.exports = Chat;

Chat.prototype.build = function() {
    var buf = new ArrayBuffer(33);
    var view = new DataView(buf);

    console.log('CHAT ---> '+ this.sender + ': ' + this.message);
    view.setUint8(0, 99, true);
    view.setUint16(5, this.sender, true);
    view.setUint16(9, this.message, true);

    return buf;
};

Клиент часть:

            // пакет чата
            case 99:
                addChat(reader, offset);
                break;

функция addChat:

function addChat(view, offset) {
	function getString() {
            var text = '', char;
            while ((char = view.getUint16(offset, true)) != null) {
                offset += 2;
		text = String.fromCharCode(char);
            }
            offset += 2;
            return text;

        }

        var flags = view.getUint8(offset++);
        // for future expansions
        if (flags & 2) {
            offset += 4;
        }
        if (flags & 4) {
            offset += 8;
        }
        if (flags &  {
            offset += 16;
        }

        var r = view.getUint8(offset++),
            g = view.getUint8(offset++),
            b = view.getUint8(offset++),
            color = (r << 16 | g << 8 | .toString(16);
        while (color.length > 6) {
            color = '0' + color;
        }
        color = '#' + color;
        chatBoard.push({
            "name": getString(),
            "color": color,
            "message": getString(),
            "time": Date.now()
        });
        debug(chatBoard);
        drawChatBoard();
    }

Клиент часть уже была написана, а вот серверную наговнокодил сам. Только вот не могу разобраться в этих смещениях, че к чему и вообще правильно ли делаю:

view.setUint8(0, 99, true);
view.setUint16(5, this.sender, true);
view.setUint16(9, this.message, true);

В общем, на клиенте у меня не получается извлечь из "пакета" имя отправителя и текст сообщения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С вышеизложенным вроде разобрался, но осталась небольшая проблема: 

Условно говоря, имя пользователя, например с ником "тест":

nick = 0, 1090, 0, 1077, 0, 1089, 0, 1090, 0; // выхлоп функции charCodeAt()
// на клиент отсылаю charCode
...
view.setUint16(offset + 1, nick[i], true);
// тут же на сервере проверяю
console.log('DBG: ' + view.getUint16(offset + 1, true)); // вывод правильный (0, 1090, 0, 1077, 0, 1089, 0, 1090, 0)
...
// принимаю на клиенте (нули отбрасываю)
console.log(view.getUint16(offset, true)); // и почему то получаю 66, 53, 65, 66
// и в итоге, после fromCharCode, получается не "тест", а "B5AB".

Такая вот байда только с русскими символами, с латиницей все как по маслу. Натолкните в чем косяк может быть.

Изменено пользователем BymerOK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...