CalypsoToolz 451 Опубликовано 4 августа, 2015 Приветствую всех! Нуждаюсь в помощи, т.к. в 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); В общем, на клиенте у меня не получается извлечь из "пакета" имя отправителя и текст сообщения. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 6 августа, 2015 (изменено) С вышеизложенным вроде разобрался, но осталась небольшая проблема: Условно говоря, имя пользователя, например с ником "тест": 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". Такая вот байда только с русскими символами, с латиницей все как по маслу. Натолкните в чем косяк может быть. Изменено 7 августа, 2015 пользователем BymerOK Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 7 августа, 2015 Тему можно закрыть/удалить, уже решил траблу) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты