Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Protobuf + AS3 + Java (http://www.flasher.ru/forum/showthread.php?t=167810)

ricoshet 13.09.2011 14:02

Protobuf + AS3 + Java
 
Добрый день. Вопрос по Protobuf.
Есть сервер под Java. Пытаюсь через Protobuf передать объект.
Для формирования класса AS3 использую protoc-gen-as3.
С сервера Java на клиента объект передается... а вот на оборот передается только когда закрываю окно Flash..

Для передачи данных использую pm.writeExternal(bytes); pm - класс сформированный из proto файла.
Код в клиента для отправки в низу. В чем загвоздка... и как передать символ перевода каретки. (socket.wruteMultiBytes('\n', 'UTF-8'); socket.flush(); - в данном случае не работает).

Код AS1/AS2:

                        var pm:ProtoMessage = new ProtoMessage();
                        pm.command = 1;
                        pm.par = new Array();
                        var buf:Param = new Param();
                        buf.name = 'test1';
                        buf.value = 'test2';
                        pm.par.push(buf);
 
                        try {
                                var bytes:ByteArray = new ByteArray();                               
                                pm.writeExternal(bytes);
                                //bytes.compress();
                                //client.writeBytes(bytes);
                                //client.writeMultiByte('\n', 'UTF-8');
                                //client.flush();
 
                        } catch (e:Error) {
                                trace(e.message);
                        }


incoob 14.09.2011 09:41

Код AS3:

                                var requestType:int = ...;
                                var request:Message = ...;
                                var buffer:ByteArray = new ByteArray();
                                request.writeTo(buffer);
                                _socket.writeInt(buffer.length);
                                _socket.writeShort(requestType);
                                _socket.writeBytes(buffer);

Отправляет сразу же.

ricoshet 14.09.2011 09:58

Спасибо. Сейчас попробую....

incoob 14.09.2011 12:28

Да, в конце, конечно, нужно написать
Код AS3:

_socket.flush();


ricoshet 14.09.2011 13:30

Спасибо помогло.... Чудеса на виражах... Изменил исходную задачу - передать только Стринговую строку без параметров:
Код:

package ua.dima;

option java_package = "ua.dima";

message Test1 {
 optional string name = 1;
}

Код Клиента на АС3:
Код AS3:

try {
 
                                var test:Test1 = new Test1();
                                test.name = "Hello, world";
 
                                var buffer:ByteArray = new ByteArray();
                                test.writeTo(buffer);
                                trace(buffer.length);
 
                                client.writeBytes(buffer);
                                client.flush();
 
                        }catch (e:Error) {
                                trace(e.message);
                        }

Код Сервера:
Код:

try{
            DataInputStream in = new DataInputStream(client.getInputStream());
            byte[] b = new byte[14];
            //while(true){
                System.out.println(in.read(b));
                System.out.println(b);
               
                TestMessage.Test1 test = TestMessage.Test1.parseFrom(b);
                System.out.println(test.getName());
            //}
           
           
        } catch(Exception ex){
            ex.printStackTrace();
        }

И в итоге получаю результат:
14 -- размер буфера
[B@1503a3 -- буфер
Hello, world -- Мессадж....
И что было не так в прошлом варианте?

Добавлено через 8 минут
Может кому-то пригодится...
Ошибка была в размере буффера на сервере.
Переделал по примеру incoob - все заработало...


Часовой пояс GMT +4, время: 11:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.