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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Jan 2011
Сообщений: 247
По умолчанию работа Socket'a

Хотелось бы спросить у людей с опытом как лучше всего работать с сокетом?
Более конкретней хотел бы спросить где именно в коде у вас находиться соединения с сокетом, выведено ли это все в отдельные классы для приема\отправки и как вообще приблизительно должно выглядеть?
Задался этим вопросом так как уже есть для меня большие проекты где я задумываюсь что соединения с сокетом и все его события я обрабатываю в главном классе, и мне кажется это не совсем верно.
Так же хотел спросить правильно ли мой подход на текущий момент в отправке\приема данных по сокету, стоит ли что-то изменить или наоборот оставить как есть?
Прием:
Код AS3:
private function inputSoket(event:ProgressEvent):void {
				var bA:int=socket.bytesAvailable; // длина
				trace('Socket: talk with me,and i see '+bA+'- symbols');					
				var socketBuffer:ByteArray = new ByteArray();
				try{
					if(socket.bytesAvailable){
						socket.readBytes( socketBuffer , socketBuffer.position , socket.bytesAvailable);     
						while (socketBuffer.bytesAvailable) {
							var byte:int = socketBuffer.readByte();  
							if (byte==0) { // if we read the end byte
								trace(msg); // treat your message
								time_txt = msg;
								parseJSON(msg);
								msg = ""; // free the buffer
							} else {
								msg += String.fromCharCode(byte); // else, we add the byte to our buffer
							}							
						}					
					}
				}catch(e:Error){
					var tmp:ByteArray = new ByteArray();
					socketBuffer.readBytes( tmp , socketBuffer.position , socketBuffer.bytesAvailable);
					socketBuffer.clear();
					tmp.readBytes( socketBuffer );
					tmp.clear();
					trace("error");
				}
}
Отправка:
Код AS3:
var json_data:Object = new Object();
json_data.method = "getTimeData";
json_data.params = {validation_key: v_key};
trace(JSONN.encode(json_data));
try{
     socket.writeUTFBytes(JSONN.encode(json_data));
     socket.flush();
}catch (e:IOError){
     trace(e);
}


Последний раз редактировалось GrafMine; 23.12.2013 в 15:31.
Старый 23.12.2013, 16:34
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Я работаю так : емеется класс SocketServer extends Socket там расписывается вся работа. Класс имеет метод execute(data) для отправки запроса. Глобальный ( основной ) контроллер приложения подписывается на события от нашего SocketServer - и пишет их куда надо, в модели, или в виды напрямую и т.п. Это из рассчета, если у нас 1 контрол. Если их больше, то каждый из контролов имеет ссылку на Server - где подписывается на свои нужные события. Если описать это по быстрому без полей :
Код AS3:
var server:SocketServer = new SocketServer()
control1.init(server , ...views, ...models)
control2.init(server , ...views, ...models)
...
addEventListener(SocketServerEvent.GET_SOME_DATA , doSomthing)
Я думаю вам и так это должно быть понятно, но на всякий случай )

Добавлено через 3 минуты
По коду, что вы привели - скажу так : плохо. Надо более структурировано описать. Разделить на методы, сделать более чистабельные переменные и т.п. Избавится от трай-катч так же можно.
__________________
Марк Tween

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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