Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.09.2011, 14:02
ricoshet вне форума Посмотреть профиль Отправить личное сообщение для ricoshet Найти все сообщения от ricoshet
  № 1  
Ответить с цитированием
ricoshet

Регистрация: Sep 2011
Сообщений: 3
По умолчанию 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);
			}


Последний раз редактировалось ricoshet; 14.09.2011 в 08:29.
Старый 14.09.2011, 09:41
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 2  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Код 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);
Отправляет сразу же.

Старый 14.09.2011, 09:58
ricoshet вне форума Посмотреть профиль Отправить личное сообщение для ricoshet Найти все сообщения от ricoshet
  № 3  
Ответить с цитированием
ricoshet

Регистрация: Sep 2011
Сообщений: 3
Спасибо. Сейчас попробую....

Старый 14.09.2011, 12:28
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 4  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Да, в конце, конечно, нужно написать
Код AS3:
_socket.flush();

Старый 14.09.2011, 13:30
ricoshet вне форума Посмотреть профиль Отправить личное сообщение для ricoshet Найти все сообщения от ricoshet
  № 5  
Ответить с цитированием
ricoshet

Регистрация: Sep 2011
Сообщений: 3
Спасибо помогло.... Чудеса на виражах... Изменил исходную задачу - передать только Стринговую строку без параметров:
Код:
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, время: 13:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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