Страница 1 из 1
Передача различных данных клиент-сервер-клиент
Добавлено: 05 июн 2014, 17:37
Апчхи
Опору при написании кода делал вот на этот урок:
http://flapps.ru/forum/topic7181.html
Теперь про собственно проблему:
Вот так происходит упаковка данных:
Упаковка кода Код: Выделить всё
function vidpravka(e:Event):void { var danniSoket:Object = ({igrok: "Gravec", kordX: гравець.x, kordY: гравець.y}); var otpravka = JSON.stringify(danniSoket); // массив байт для посылки... var sendBytes:ByteArray = new ByteArray(); // байты самого сообщения... var mBytes:ByteArray = new ByteArray(); // запишем сюда строку... mBytes.writeUTFBytes(otpravka); // запишем блину сообщения... sendBytes.writeInt(mBytes.length); // запишем сам массив байт сообщения... sendBytes.writeBytes(mBytes); // отошлем байты... socket.writeBytes(sendBytes); socket.flush();}
Файл сокета я взял из урока, заменив только из файла Server.java рядки 62 и 66, вместо
message прописал danniSoket; в 158-м рядке Client.java проделал то же.
Код приёма и обработки:
Обработка и вывод Код: Выделить всё
function readMessage():void { // если в буфере меньше длина сообщения, чем нужная длина - // ждем получения данных... if(_buffer.length < _buffer.position + _length) return; // читаем сообщение... var user_message:String = _buffer.readUTFBytes(_length); // если в буфере нет данных после считывания сообщения // и разделителя - очистим его... // если есть - очистим в следующий раз :) if(_buffer.bytesAvailable == 0) _buffer.clear(); // если мы тут - сообщение нормально пришло... // декодируем сообщения.. var decodedMessage:Object = JSON.parse(user_message); // теперь выводим сообщение... var gravOnl:String = decodedMessage.danniSoket.igrok; var gravOnlkordX:Number = decodedMessage.danniSoket.kordX; var gravOnlkordY:Number = decodedMessage.danniSoket.kordY; inf1.text = String(gravOnlkordY); var pers:Gravec = new Gravec(); pers.x = gravOnlkordX; pers.y = gravOnlkordY; addChildAt(pers, 5); // тут все ок, значит изменим состояние на ожидание длины... _state = READ_LENGTH;}
И тут собственно ничего не получается - ни объект не создаётся, ни координата не выводиться в текстовое поле. Может что-то заметите или знаете ,что поможет решить проблему. В таком случае прошу помочь и указать на мой промах.
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 05 июн 2014, 20:55
sasha^
ты немного запутался в том что такое JSON
клиенту(flash) глубоко наплевать какое имя переменной было у другого клиента...
т.е. обращайся как
decodedMessage.igrok
если других ошибок нет то заработает...
ps. приятно знать что мои уроки кому-то пригодились
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 12:45
Апчхи
Спасибо за указание, полезно. Но нашел ещё одну неточность, которую не знаю как решить:
Проверяя работоспособность кода с помощью функции
обнаружил, что после строки
Код: Выделить всё
var decodedMessage:Object = JSON.parse(user_message);
проверка не работает. Начал разбираться, и вот к чему дошел:
Если код написан в классе, то он работает и так:
Код: Выделить всё
var decodedMessage:Object = JSON.parse(user_message);
А вот если написан в кадре (как написал я), то вот как:
Код: Выделить всё
var decodedMessage:Object = JSON.parse(e.target.data);
Но если я пропишу так как надо, то кол-во аргументов, которые ожидается и полученное, не совпадает, т.е. при вызове функции нужно прописать не readMessage(), а что-то другое. Только вот что? Попробовал некоторые вариации, не получилось, можете подсказать?
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 15:33
sasha^
А вот если написан в кадре (как написал я)
ты так не шути))) код из кадра не имеет доступа к переменным класса.. темболее если есть код в кадре - то не может быть прикреплен класс.. значит в кадре нужно создавать его экземпляр.. и т.д.
сделай в классе и не мути=)
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 16:04
Апчхи
Увы, переделывать в классы - это долго( Можно хотя б наброски, что бы иметь представление, что и как?
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 16:26
sasha^
Увы, переделывать в классы - это долго( Можно хотя б наброски, что бы иметь представление, что и как?
нет..долго.. просто скажу:
1) измени private на public
2) делегируй все задачи классу
Если код написан в классе, то он работает и так:
var decodedMessage:Object = JSON.parse(user_message);
А вот если написан в кадре (как написал я), то вот как:
var decodedMessage:Object = JSON.parse(e.target.data);
потому-что класс имеет доступ к его членам.. кадр - нет, потому он берет данные из цели события(сокета), так можно и в классе сделать, но тогда код запутается. а суть ооп в том чтобы сделать проще...
UPD: как вариант перепиши класс в функции(под кадр) и все будет работать...=))
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 17:03
Апчхи
По второму пунктику хочу сделать уточнение:
все переменные прописать и заполнить данными, файл класса в одной директории из исходником, из кадра обращаться вот так:
Код: Выделить всё
var dopKlass:Main = new Main();var koordinata:Number = dopKlass.decodedMessage.kordX;
Я правильно понял?
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 17:58
sasha^
По второму пунктику хочу сделать уточнение:
все переменные прописать и заполнить данными, файл класса в одной директории из исходником, из кадра обращаться вот так:
нет. не правильно понял..
сделай так чтобы класс или слал событие и подпишись на него из кадра.. или сделай так, чтобы класс вызывал фукнцию-обработчик из кадра... т.е. что-то вроде этого...
Код: Выделить всё
// код класса// тут объявление переменных...public var _messageFunc:Function = null;// тут тоже код класса...private function readMessage():void {//... тут код ф-ции..получаем данные...var decodedMessage:Object = JSON.parse(user_message);// теперь если есть ф-ция обработчик - передадим в нее...if(_messageFunc != null) _messageFunc(decodedMessage);// тут дальше код ф-ции}// опять код класса... // код в кадреvar obj:Main = new Main();// твоя супер-функция обработки...function myfunc(json:Object):void {trace(json.kordX);}obj._messageFunc = myfunc;
Re: Передача различных данных клиент-сервер-клиент
Добавлено: 06 июн 2014, 18:22
Апчхи
Спасибо!