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

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

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

Регистрация: Nov 2015
Сообщений: 46
По умолчанию передача в socket

Вообщем не знаю что делать. Надо передать информацию в сокет. Все хорошо передается но есть одно но!
Делаю рисовалку через сокет, она 90% отправленных данных теряет...
Заметил я это когда в чате пытался пофлудить.. Видимо какой-то есть в сокете затык на эту тему.
Отсюда напрашивается вывод, что надо как-то нарисованый объект от момента нажатия мыша до момента отпускания сохранить в буфер и после этого отправить в сокет... И так со следующим...

Есть в AS3 какие-то возможности для такого?? Если есть, отправьте куда надо:-)) Может у кого есть готовое решение?

Старый 07.11.2015, 15:17
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Видимо какой-то есть в сокете затык на эту тему.
Нет там никакого затыка. Можно отправлять всё что угодно. Если не отправляется, значит в коде что-то не верно, либо на сервере, либо на клиенте.

Старый 07.11.2015, 15:27
exsites вне форума Посмотреть профиль Отправить личное сообщение для exsites Найти все сообщения от exsites
  № 3  
Ответить с цитированием
exsites

Регистрация: Nov 2015
Сообщений: 46
Любите пофлудить? Все отправляется, но если отправлять 100 пакетов в секунду то 90% теряется.
Попробуйте увидите.

Добавлено через 19 минут
Код AS1/AS2:
		var command:String = sendVar;
		// создаем байтовый массив из строки
		var pack:ByteArray = new ByteArray();
		pack.writeUTFBytes(command);
		// помещаем позицию байтового массива в занчение 0
		pack.position = 0;
		//
		// отправляем в сокет длину пакета
		socket.writeShort(pack.length);
		// отправляем в сокет сам пакет
		socket.writeBytes(pack);
		socket.flush();
Возможно тут что-то теряется...? сделал трейс, все что пишется подготавливается к отправке и отдается в sendVar.... а дальше до сервера не доходит...

Старый 07.11.2015, 16:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Любите пофлудить?
Судя по количеству ваших тем, это вы, товарищ, пофлудить любите. Вместо того, чтобы почитать полезную инфу на эту тему, или вообще научиться правильно темы создавать.
Все ваши темы звучат примерно так: "У меня что-то не работает, объясните почему. Но только по теме!" И пофиг что эта тема для телепатов.
Я могу с уверенность сказать, что я делал реалтаймовые игры на сокетах, и у меня ничего не тярелось. Точнее сказать потери в сети всегда возможны, но точно не в таких объемах. Отправлять по 100 пакетов в секунду - явный перебор. Это DDOS бот что ли?)

Надо делать буфер, копить какую-то инфу, и после этого отправлять. 100 раз в секунду слать что-то на сервер точно не нужно.

Старый 07.11.2015, 18:08
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 5  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
Цитата:
я делал реалтаймовые игры на сокетах, и у меня ничего не тярелось
А можете подсказать какие-нибудь ресурсы для простейшей многопользовательской бродилки? Может туториалы есть какие или примеры?
__________________
Надо сменить подпись...

Старый 07.11.2015, 18:20
exsites вне форума Посмотреть профиль Отправить личное сообщение для exsites Найти все сообщения от exsites
  № 6  
Ответить с цитированием
exsites

Регистрация: Nov 2015
Сообщений: 46
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Это DDOS бот что ли?)
Вы читать умеете?
Рисовалка!!! Она по движению мыши создает координаты! Координат этих туева хуча. Эти координаты я отправляю на сервер!
Где я написал что у меня что-то не получается? Я спросил какие варианты реализации, потому что по сути получается ддос.. МОжет кстати по этому и теряются пакеты.

Как реализовать буфер на as3? покажите пример? И до кучи вашу игру которую вы сделали, поиграю.:-))

Старый 07.11.2015, 18:36
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Любите пофлудить?
Цитата:
Вы читать умеете?
Не нужно вести общение с участниками форума в таком тоне.

Старый 07.11.2015, 20:54
exsites вне форума Посмотреть профиль Отправить личное сообщение для exsites Найти все сообщения от exsites
  № 8  
Ответить с цитированием
exsites

Регистрация: Nov 2015
Сообщений: 46
извините

Добавлено через 58 секунд
подкиньте идею как записать движение мыша в массив???

Старый 07.11.2015, 21:17
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
А как получаются 100 пакетов в секунду? Что-то я при всем желании не могу это представить.
Алгоритм, который сходу придумывается: в течение N кадров/секунд записываете историю рисования (риализовываете через массив с экземплярами кастомного класса с историей), затем после этого отправляете полученный массив координат и действий в пакете.

По истории посоветую сделать базовый класс, от него отнаследовать классы типа ChangeColorHistory, MouseDownHistory, MouseUpHistory, MouseMoveHistory и тд. Затем сериализуете каждую частичку истории и добавляете в пакет. По сокетам посоветую свои давнишние статьи, может быть подмогнут где-то с чем-то:
http://www.flasher.ru/forum/blog.php?b=579
__________________
тут я

Старый 07.11.2015, 22:01
exsites вне форума Посмотреть профиль Отправить личное сообщение для exsites Найти все сообщения от exsites
  № 10  
Ответить с цитированием
exsites

Регистрация: Nov 2015
Сообщений: 46
Да я попробовал отправлять все изменения координат мыша через сокет... если мышкой медленно рисовать, то все рисуется. если быстро, то пакеты теряются и вместо круга квадрат получается.

Я в AS всего 5 день что-то делаю и во Flash CS6 поэтому про классы я не ведаю. Пишу в IDE.
Алгоритм я думаю правильным такой, от нажатия мышки до отпускания собрать то что происходило с координатами в массив...
А вот как собрать это в массив....

Код AS3:
 
	function startPic()
	{
 
	import flash.display.Shape;
	//Прорисовка линии
	var draw_line:Boolean = false;
	stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
	stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
	image_mc.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
	//Фигура, в которую будут добавляться нарисованые линии
	var image:Shape = new Shape();
	//Устанавливаем Ширину, цвет и прозрачность линии (от 0 до 1)
	image.graphics.lineStyle(3, 0x000000, 1);
	//Добавляем фигуру в клип
	image_mc.addChild(image);
 
		//Нажатие ЛКМ
		function MouseDown(mouse:MouseEvent):void
		{
			draw_line = true;
			//Указываем точку откуда будем начинать рисовать линию
			image.graphics.moveTo(mouse.localX, mouse.localY);
 
 
 
 
/// вот тут пошла первая точка в сокет
 
			SendDataServer(mouse.localX,mouse.localY, 'st');
 
		}
 
		//Отпускание ЛКМ
		function MouseUp(mouse:MouseEvent):void
		{
			//отключаем рисование линий
			draw_line = false;
 
 
/// тут идет остановка в сокет
 
			SendDataServer('', '', 'stop');
		}
 
		//Перемещение мыши над клипом image_mc
		function MouseMove(mouse:MouseEvent):void
		{
			if (draw_line)
			{
				//Рисуем линию в точку, где находится курсор
				image.graphics.lineTo(image.mouseX, image.mouseY);
 
 
/// пошло рисование в сокет
 
				SendDataServer(mouse.localX,mouse.localY, 'on');
 
 
				//Снова указываем точку откуда будем рисовать следующую линию
				image.graphics.moveTo(image.mouseX, image.mouseY);
 
 
/// ну и тут соответственно опять в сокет
 
				SendDataServer(mouse.localX,mouse.localY, 'tw');
			}
		}
 
 
		function Clear():void /// очистим экран
		{
			image.graphics.clear();
			startPic();
		}
 
		btn_clear.addEventListener(MouseEvent.CLICK, Clear);
	}
startPic();
Вот рисовалка. Рисуешь медленно все рисуется как надо. Рисуешь быстро.... прямые линии. Какие координаты проскочили те и отрисовались..

А может у меня сокет криво работает?

Добавлено через 12 минут
Читаю статью, интересно.


Код AS3:
 
	function SendDataServer(a,b,c):void
	{
		/// переменные из текстового поля
		var sendPic = a +'x'+ b + 'x' + c;
 
		//trace(a,b,c);
 
			var command:String = sendPic;
			//trace (a);
 
		// создаем байтовый массив из строки
		var pack:ByteArray = new ByteArray();
		pack.writeUTFBytes(command);
		// помещаем позицию байтового массива в занчение 0
		pack.position = 0;
		//
		// отправляем в сокет длину пакета
		socket.writeShort(pack.length);
		// отправляем в сокет сам пакет
		socket.writeBytes(pack);
		socket.flush();
	}
	//// отправка данных

Гляньте, может у меня в отправке данных что-то не то? Или они там теряются на приеме?
Или реально столько много нельзя отправлять?

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

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

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


 


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


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