Помощь - Поиск - Пользователи - Календарь
Полная версия: Программисты на Дельфи или С++
Форумы Seaward'а > Прочие игры > Браузерная MMORPG "Пиратские Сокровища" (Pirates' Treasures)
Страницы: 1, 2
ALexusB
Нужно разработать оболочку типа веб-браузера, но с перехватом ссылок (обращений в инет) и управлениям скаченными файлами (картинки и прочие ресы), типа своего кеша. Файлы хранить в папке, где .ехе лежит. Файлы могут периодически тереться.

Сам браузер не имеет кнопок управления, только запустить и закрыть, ну может еще на весь экран или окно. Остальное все прописывается в коде. Браузер должен уметь показывать Флаш и перехват ссылок именно от флаша.

Кто в теме и хочет помочь, более детальное ТЗ по ЛС дам.
ALexusB
Все еще актуально. Реально это тема для начинающего изучать среду и язык (например, Дельфи). Вместо бесцельного создания тест-примеров по книжке, можно создать реально нужную простую программу, получить хорошие навыки и сделать полезное для игры.

Со своей стороны готов просуппортить на уровне идей и даже готовых методов. Очевидно, я могу эту программу сделать сам (все для этого есть, токо нет дельфи на компе smile.gif), но не все нужно делать мной одним, если что-то подъемное для других. У меня есть другие задачи, которые пока могу поднять только я.

Соответсвенно, перефразирую:
Нужно сделать простую программку, уровня курсовой работы первого курса технического ВУЗа (1-2 вечера) при активном участии тьютора (меня). На выходе - уверенные знания в области Веб-контролек борланда и вера в себя "я могу и умею".

В качестве референса спросите Warshipa, как он теперь "не знает" флаш smile.gif Главное, желаение сделать хорошее дело себе и нашей игре.
navy
А может на C#? Я тут глянул, можно сделать на движке IE нормально все, с перехватами и прочим. Ну не прёт меня делфи smile.gif на с++ это сильно сложнее. Хотя и под делфи есть идеи как это сделать, но C# значительно проще.
Warship
Ну, я думаю, особой разницу нету, на чем. Главное, чтобы работало и потом это можно было поддерживать smile.gif Хотя, это скорее вопрос к Алексу...

Но вот на двиге IE... Хз, как там в C#, но на VCL C++ Билдера такое не получится точно (пытался, обжегся, т.к. "сильно не то"): компонента TWebBrowser - это IE в прямом смысле этого слова, она тянет все настройки из системы, включая и папку для кэша.
ALexusB
Дело не в папке, а в наличие нужных прерываний. То, что стандартные дельфевыые (билдеровые - не суть, они просто на шаг старее идут) управляют ИЕ, это как раз гут
А подменять нужно ссылки, а не кеш ИЕ. Лезет страница (флашка) в инет, смотрим куда, есть ли файл, оп-а, есть, заменяем ссылку на локальный файл и все, пусть лезет. То есть сама страница (флашка), работает штатно.

на чем делать пофиг, Дельфи назван, как наиболее простой путь + мне понятное для поддержки и развития.
Если все это проще в С#, то можно и в нем. Но есть один минус С-шарпа, это потребность .НЕТ. Казалось бы, качаешь ты клиента на 500Кб, а чтоб его запустить нужно еще 100мб sad.gif

на Дельфи есть галочка, компилять с библиотеками. Ехе пухнет на 1-2мб, но более ничего не просит.

В ЛС написали уже несколько человек - спасибо всем, кто хочет помочь.

Если у кого-то нет времени или желания делать всю прогу, поможет идея и кусок кода (наводка на нужный метод), как именно подменять запрашиваемый файл на свой.
navy
Хз, я в делфи глянул, там вроде нет возможности подставлять документ в компоненту, в этом плане у с# все ок. По поводу фреймворка.. у 99.99% уже есть он. Тем более в висте уже идет с системой.
Вобщем, Алекс, кинь мне на мыло задание, желательно с готовыми флешками, чтобы знать как они себя ведут, потому что одно дело прерывания браузера отслеживать, другое дело чисто флеша...
ALexusB
Ну, для примера все есть. Тут напишу.

тестить можно на
http://online.seaward.ru/files/dice.swf - она грузит другую флашку, ее можно кэшировать.

И на
http://online.seaward.ru/files/ABC/talker.swf

Эта грузит ХМЛ файлы, картинку и мр3

Кульминацией работы должна стать работа через прогу с сетевыми кубиками
http://online.seaward.ru/index.php?page=Game,DiceOnline
Тут несколько переходов через текстовые старницы в флашки и редиректы между страницами. Влючая авторизацию на сайте.

ТЗ если свести к краткости.
Программа-браузер, заточенная на конкретный сайт, умеет хранить кэш и, главное, управлять им - проверять его актуальность спец запросом (в ХМЛ) на предмет даты устаревания и тереть содержимое.

Похожа на пауков, делающих офлайн копию сайта, но пропускает все обращения не к статичным файлам, то есть к .php
navy
Вобщем посмотрел я еще разок smile.gif просто так не выйдет перехватывать. Фактически тут не столько браузер нужен (хотя если нужно показывать хтмл, то нужен браузерный компонент. Кстати, в дельфи твебконтрол не показывает флеш вообще никак smile.gif) сколько обычный флеш плеер с возможностью закачивать флеш из инета вручную. Короче не совсем внятно, но как-то так выходит. smile.gif
Далее.
Переходим ближе к телу. Стандартный способ играть флешку на форме это использование АктивХ компонента. Все бы хорошо, но просто так, его ивенты не перехватывают (точнее вообще не перехватываются, кроме тех, для которых есть интерфейс) Поэтому надо этот интерфейс прикручивать изнутри флеша. Это можно, вот пример http://www.codeproject.com/KB/audio-video/...xternalapi.aspx. Вот как-то пока так.

ЗЫ: Если будет нормальный интерфейс к событиям флешки. то реализовать кэш не проблема... оно у меня даже уже почти есть smile.gif
ALexusB
WebBrowser1.Navigate('http://.......swf');
работает и грузит флашку.
Проверял - Хомо делал рабочий пример.
navy
Хз, у меня в 2006 студии не работает, вылетает в глупую какую-то ошибку. Но не в этом суть. Флеш никому ни о чем не говорит, когда что-то делает. Надо делать все, что должно перехватываться вот таким образом
on(click) {
fscommand("sendCmd", 1);
}
т.к. писать свой контрол для флеша нереальн, а поиск по гуглу выдает только использование АктивХ компонента. smile.gif
ALexusB
Вот это тоже инфа
http://www.kansoftware.ru/?did=97

Там есть про перехват ссылок.
Но, если перехват не работает для флашки, то да, задача анрил.
Нужно это подтвердить или опровергнуть.
Изменять флашку под прогу - не вариант. Интересно именно перехватить ее обращения.

Не стоит у мя дельфи... сча буду качать турбо 2006
navy
Хз, покопаю еще, но я не нашел такого пока. Т.е. это искать компонент сторонний скорее всего придется. Но в стандартном АктивХ событий очень мало передается.
dolphin_sv
У TWebBrowser есть обработчик событий на начало закачки файла и окончание, осталось только подумать, как этот файл подменить и как перехватить переход на него из флаш.
navy
Цитата
У TWebBrowser есть обработчик событий на начало закачки файла и окончание, осталось только подумать, как этот файл подменить и как перехватить переход на него из флаш.

Блин, ну вы бы попробовали сначала, а уж потом бы говорили biggrin.gif Да он есть, но он работает только для НАВИГАЦИИ. Flash это делает по своему. Т.е. если первая флешка грузит вторую, то нифига уже не перехватывается.
ALexusB
нашел портабл турбо дельфи - скомпилял простой пример, который раньше работал без проблем (сам видел!) - не работает в WebBrowser .swf - ошибка лезет, причем Иешная, он ее как строку читает и ругается на символы.
Ясности нет почему так, может раньше был плааер 9, сча 10, но не понятно. На форумах по дельфям пишут, должна работать по умолчанию без проблем.

С перехватом обращений из флашки (если заработает) нужно это тестить, если нельзя, то и вопрос тогда отпадет до "технической возможности"
navy
У меня есть подозрение, что эта ошибка связана с версие IE. С перехватом пока ищу инфу и варианты.
ALexusB
может! у мя и ИЕ обновлялся до 8
navy
Просто у дельфи есть неприятная особенность (кроме некоторых других еще smile.gif) Ее компоненты сильно завязаны на версиях файлов ОС. Т.к. ребята пишущие их в большинстве случаев просто малограмотные. Я смотрел исходники Инди, я плакал. Честное слово.
ALexusB
Вот она тестовая загадка

Дома на вин ХР сп3 не работает
На работе на виста ульт сп2 х64 работает

да, с таким подходом завязки на че-то внутри ОС, дельфи не канает.
navy
Алекс, а как мувик второй грузится из флеша? Я это о чем, попробовал даже сделать новый класс, производный от Flash AX, все равно там не нашел ничего интересного... хотя некоторые функции и методы еще поковырять можно.

Кстати, а почему все же не сделать интеграцию со своим клиентом? Так будет более логично, если ты хочешь именно отдельным клиентом это все показывать, а не стандартными браузерами.
ALexusB
Грузится обычно, как любой файл, идет запрос по ссылке пути.

Вся эта буча и овзникла, чтоб выяснить, что можно, что нет. Очевидно, крайне хотелось иметь клиента, играющео браузерные флашки, чтоб "не делать" клиента вообще.
navy
Кстати хз в чем прикол, но у меня флеш кэширует сам все, видимо это кэш IE как-то используется. Т.е. загрузка идет молниеносно. второй флешки.
ALexusB
ИЕ кэширует и Опера тоже - все гут. Но это может быть настроено ко стиранию. Это мешает (на тестах кубиках обжегся), когда обновляется на серве файл.
Потому и была идея клиента игры, как описал.
Тогда его можно давать не пустым, а спредустановленым кэшем в .рар, чтоб он не лазил вообще в инет. А кэш по мере устаревания сам обновится.
Идея возникла, когда на ЖПРСе посидел, имея клиент можно и с него играть.
navy
Цитата
ИЕ кэширует и Опера тоже - все гут

Не, я о том, что активХ плагин, который я в своей проге юзаю кэширует закаченое. Видимо он использует кеш IE, т.к. изначально под него и писался.

И все-такие, если действительно делать под свой клиент, то тогда надо делать интеграцию с ним, иначе никак.. Потому как флеш, сам по себе, это платформа.... его события, кроме внешних, не перехватить.
ALexusB
используемый двиг браузера должен (для этой цели) уметь перехватывать событие вылеза в Инет (обращения куда-то). Если он это не умеет, то далее можно не копать - не реализуемо.
Флашем управлять нечего - нужно перехватывать его обращения в инет и подменять ответ на эти обращения. То есть, флаш вообще не должен знать, где он.

То, что это можно сдлеать в принципе - факт - пишут же свои бразузеры или файрволы, которые знают, кто куда лезет и могут этим управлять.
Другое дело, можно ли это сделать БЫСТРО и просто на С++ или Дельфи. Если в них нельзя сделать свой браузер, то и говорить не о чем.
navy
Цитата
То, что это можно сдлеать в принципе - факт - пишут же свои бразузеры

Это факт то да, но тут суть какая? Это или простые браузеры, которые флеш не поддерживают. Или серьезные проекты с большим штатом (Фокс, Опера, Хром) Там кстати, используется ДРУГОЙ! плагин.. можно конечно его попробовать использовать, но тут большой косяк получиться может. Т.к. браузер рендерит страничку встраивая в него флеш, и как он это делает достаточно туманно. Т.е. плагин может работать как контрол, а может просто как DLL которая декодит то, что надо.

Этот АктивХ контрол, как мне кажется, использует настройки IE для выхода в инет. Своих настроек для подключения у него нет. Перехватить обращение в инет нельзя (точнее можно, но заблокировать его нельзя, по крайней мере мне этот способ не известен). Фаервол работает по другому принципу, и писать его для такой задачи тоже не вариант.

Поэтому с моей точки зрения, нужно разделять задачи для флеша и своего клиента. Клиент качает, флеш показывает.
Killbrum
Кстати ребята если нужна будет помощь то стучитесь =) . В программинге конечно не так давно... но учусь и стараюсь =) (2 года занимаюсь программингом на С++ и прочих).

Если скажем так... на билдере навять свой мини браузер - дело одного вечера. Но это уже готовый браузер. То есть оболочка уже сделана борландовцами... но перехват пакетов (собственно в пакетах ссылки) там не сделаешь. Надо делать что то типа сниффера и перехватывать тогда всё. Как по мне глупо. Намного лучше будет скажем сделать так:
Если требуется соеденение с сервером, или скажем с той же инет страничкой ( просто не до конца ясно к чему будет ити конект) то можно просто сделать всю графику чисто в клиенте (т.н. то что Алексус просит написать) и просто скажем через сокет отправлять данные на сайт и так же принимать и обрабатывать.

Ну а если надо просто получать какие то данные из сервера так тут проще некуда ))))) клиент-сервер сокеты и вперед из песней)))

"Перехватить обращение в инет нельзя (точнее можно, но заблокировать его нельзя, по крайней мере мне этот способ не известен). Фаервол работает по другому принципу, и писать его для такой задачи тоже не вариант."

Фаер как драйвер работает. NDIS драйвер.
Перехватывать пакеты тоже не сложно так что ошибаешся =). Сам делал. Отфильтровать тоже можно - проксю сделать и всё.

Пардон ребята но реально не сильно просто вежаю в суть =)
ALexusB
Да уже ясно, что это на борланде не сделать и это не просто. Но можно точно, браузеры же пишут свои с нуля, а там точно есть управление кэшем и перехват с подменой на файл из заначки.

Приоритет у задачи низкий, тк и без этого все будет работать, просто жрать трафика в разы больше.
Killbrum
))))))))) улыбнуло))))
Борланд это ИДЕ )) точнее Билдер, но не важно. А реально ты можешь и на Dev C++ это сделать. Просто у Билдера нету готовых таких контролов. Да и зачем они? оО

Просто Вижуал более заточен под Винь, но есть очень мало вещей где нельзя сделать на Билдере то что можно на Вижуале. 99% решений абсолютно нормально можно сделать там и там. Просто как правило у Билдера хуже компилятор и потому выбирают Вижуал. Но С++ он и в Африке С++ =)

Браузер пишется очень просто... сокс 4 скажем, читаем мануал по HTTP протоколу. Изучаем как идет передача, то есть скажем так... "мини-язык" этого протокола. Делаем на соках браузер. Тут уже перехвачивать ничего не надо т.к. есть прямой доступ к данным.

Если вопрос в траффике то можно передавать сжатые файлы и их распаковывать (само собой не в ручную).

Просто как уже и говорил если надо перекинуть файлы с сервера на клиент (авто апдейтер) то я бы делал на чистых сокетах + сделал скажем что на сервере висят архивированые данные, на клиенте они когда докачиваются то распаковываются и бросаются в нужное место (само собой сильная економия траффика).

Если скажем надо передать какие то новости, текст (просто постоянно пытаюсь понять что конкретно надо и связать это с игрой, а т.к. очень много времени занимался лаунчерами то все мысли почему то о чем то таком...) то можно просто сделать ту же прогу, графику сделать скажем в том же Билдере (благо и контролов много есть, я про альфа контролы, да и сделать GUI там куда проще) а уже от туда с помощю тех же сокетов посылать HTTP запросы.

---------------------------------------------------------------------------------
Вчитываясь в последние слова
"а там точно есть управление кэшем и перехват с подменой на файл из заначки."
Понял что это всё таки касается авто апдейта. Как понимаю это для обновления файлов. То есть если скажем уже на харде имеется патч то чтобы не перекачивать его ещё раз а просто уже сразу инсталировать. В таком случае (если конечно я понял о чем речь) можно сделать так:
1) сделать проверку всех файлов
2) взять скажем md5 каждого файла и отправлять на сервер
3) получить от сервера результат или файл нуждается в апдейте или нет и получить его теперешний md5
4) проверяем скажем папочку Temp на наличие там файла с нужным md5
5) если нету орем серверу чтобы отослал файлик
6) приняли файлик, распаковали, удалили старый - поставили новый
7) так проверяем все файлы. Когда всё дошло до конца можно уже запускать игру и играть. Таким же мотодом можно сразу оповещать игроков о том что доступен новый апдейт.

Надеюсь чем то помог =)
delfin_
Цитата(Killbrum @ Nov 14 2009, 16:46) *

Понял что это всё таки касается авто апдейта. Как понимаю это для обновления файлов.

Алекс делает браузерную флеш игру. См. примеры, и ему нужен "умный" браузер который мог бы контролировать те функции которые ему (Алексу) нужны (о них см. выше). Как оказалось, таких нету. Вот он и хочет написать свой браузер, который будет использоваться только для игры, т.е. нечно вроде своей апликации.


Цитата(Killbrum @ Nov 14 2009, 19:03) *

Кстати звиняюсь за оффтоп.

Было такое дело. 6.gif
Killbrum
Ясно =) чесно говоря проще флеш игру сделать на С++ чем написать браузер который будет реагировать как надо =). Просто сделать браузер из готового контрола дело простое. Но сделать браузер с нуля... я бы не стал.

Кстати звиняюсь за оффтоп.
delfin_ Вас ничего не связывает с игрой Mu Online ? o_O. И Вы случайно небыли в команде [BoR] или Devil Network? Просто очень знакомый ник к тому же если помню то тот парень тоже из Кишинёва был.
ALexusB
Цитата
чесно говоря проще флеш игру сделать на С++

флеш игру проще сделать на флеш smile.gif
А то звучит смешно.
Я уже понял, так просто трафик не минимизировать, значит будет без клиентской части.
navy
Цитата
Браузер пишется очень просто... сокс 4 скажем, читаем мануал по HTTP протоколу. Изучаем как идет передача, то есть скажем так... "мини-язык"

флеш ты чем рендерить будешь на странице? smile.gif а перехватывать его внутренние запросы в инет?
Цитата
Я уже понял, так просто трафик не минимизировать, значит будет без клиентской части.

Просто не получится, это точно. А сложно делать, не стоит имхо, т.к. увеличит количество критических точек.
Killbrum
Я про простенький браузер))))
Fry
Ещё нужна помощь? или забили?
navy
Есть конкретные предложения? Напиши Алексу в личку.
Fry
Давно бы написал , но запрещено sleep.gif
Tymofei
Кто мешает найти его мыло или аську?
Или пойти в Таверну и "набить" десяток постов smile.gif
Fry
Зачем мне это? Не проще спросить в конкретной теме.
ALexusB
Цитата(Fry @ Jun 16 2010, 10:06) *

Ещё нужна помощь? или забили?

а знаешь техническую возможность (простую), как это сделать?
Дай идею
Fry
В делфи можно написать.
Shadow
До сих пор не могу понять, почему ALexusB не хочет использовать стандартную архитектуру вида: клиент - флэш, сервер - С/С++||Джава|| C#...
Fry
Ну клиент в делфи , конект к серву , там уже флеш
Shadow
Цитата
конект к серву , там уже флеш

Э-э-э, а сервер на флэш - это уже реально? Раньше точно нельзя было сделать. Тот же Flash Media Server - это не сугубо флэш smile.gif
Fry
Сервер? Там же будет на хосте уже ? Это же для браузерной игры типо?
ALexusB
зависит от хостера, если не брать сразу выделенный серв.
С# - это винда сразу.
Ява - да гут, но не везде на простых хостингах (как этот форум) есть.
Для анихронного (а не реалтай) времени РНР достаточно. А если будет не достаточно, то значит игра успешна и можно и переписать на яву smile.gif
Fry
Зачем перехват ссылок? =) и т.п
не проще просто там оболочка , веб , остальное прост
Ну типо Foar.
Shadow
Цитата
Для анихронного (а не реалтай) времени РНР достаточно. А если будет не достаточно, то значит игра успешна и можно и переписать на яву

Хм, php не сможет вытянуть большое кол-во пользователей онлайн. Скорее всего, хостер вас прикроет из-за нагрузки, которую вы будете создавать smile.gif Ладно, если все же решите переписать серв на С/С++ - я к вашим услугам. Это будет интересно.
navy
C# Не всегда значит винда smile.gif есть Моно. Но не суть, для серверной части все равно надо что-то другое, хотя те же самые модули написанные на С# можно использовать на хостингах, где есть возможность использовать сильверлайт.
Цитата
Ну клиент в делфи , конект к серву , там уже флеш

ты не до конца понял задачу может? smile.gif Нужна клиентская часть, которая занимается кешированием флешек и управлением всеми запросами к серверу. Сделать это "просто" не получится, т.к. флеш сам по себе лезет в инет, своими внутренними механизмами. Оно так написано. Чтобы управлять им нужна система похожая на прокси-сервер или фаервол.
Commandor_S
Цитата(Fry @ Jun 16 2010, 09:06) *

Ещё нужна помощь? или забили?

Я бы, на месте Алекса, сходу отказался бы от такого предложения в помощи. dry.gif Команда Сиварда -онлайн врядли сможет "потянуть" специалиста ТАКОГО уровня (который даже не потрудился правильно составить предложение). Но, всё равно, спасибо тебе, о Солнцеликий, что ты снизошел до самоличного предложения. (ноги когда начинать целовать?) wink.gif

Цитата(Fry @ Jun 16 2010, 12:25) *

Зачем мне это? Не проще спросить в конкретной теме.

Действительно. Зачем тебе это? О Солнцеликий. king.gif






Цитата(Fry @ Jun 17 2010, 12:31) *

Откуда такая агрессия? Я вам что-то сделал ? И какой ноги целовать и т.п ? я об этом не о чём не говорил . Вы что-то сами себе возомнили там sleep.gif И как моё не правильно составленное предложение может показывать уровень моего знания языка?
я просто пытаюсь помочь.

Дабы не офтопить не буду создавать новый пост. wink.gif


Теперь, собсно, ответ. Можно я не буду "раскладывать по полочкам" твои месседжи? Если ты не понимаешь смысла того, что написал, то... извини, я врядли смогу чем либо помочь. wink.gif smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2020 Invision Power Services, Inc.