|
|
|||||||||||||||||||||||||||||
|
Чат на ASP: от простого к сложному (исходники)Источник: WMATE Олег Яцура
Данная статья является пробным камнем в огород ASP-чатстроительства... Итак, требуется создать чат-сервер на ASP - ну так давайте сразу из огня да в полымя... Во-первых, сразу разберемся - а что такое чат с точки зрения программиста? Да нет ничего проще - имеем один общедоступный массив, в который, по идее, должны складываться все фразы, посланные каждым пользователем и плюс механизмы для передачи от каждого пользователя его посланий в этот массив и наоборот - передачи всех (или не всех) данных этого массива всем (или, опять же, не всем) пользователям. Вот, если не все, то почти все... Теперь посмотрим, как сие нам можно без особых потугов создать на ASP... Можно много и по "разному" отзываться о программистах Microsoft да и о самой конторе в целом, но вот за объект Application в данном случае можно только сказать спасибо. И правда, для создания общедоступного массива данных в ASP лучше не придумаешь. Итак, создаем файл global.asa (если он еще не создан) и в Application_OnStart добавляем следующий код: dim MyMessArray()
Таким образом мы создали массив MessageArray размерностью 20. Именно в нем и будут храниться все фразы пользователей в чате (размерность, естественно, зависит от вас, но, во-первых, врядли хотя бы четверти пользователей вашего чат-сервера ну очень сильно нужно будет сразу наблюдать на экране 50 или 100 фраз сразу, а, во-вторых, ресурсы сервера тоже не безграничны). В принципе, на этом можно и закончить :-). Ну, почти закончить. А в виду того, что только три китайских "почти" и только в китае берут за одно целое, мы продолжим. Сама организация записи\чтения, естественно, просто как два байта. Берем фразу, полученную от пользователя и пишем ее в наш массив:
Если разобрать вышеуказанный код построчно, то:
Со чтением и выводом на экран пользователей проще: messArray=Application("MessageArray")
...и построчно:
Ну вот теперь точно все, разве что за исключением определенных тонкостей, на разработку и реализацию которых может уйти вся жизнь :-)). Самое главное здесь, не забыть, что у вас должно присутствовать, как минимум, или два окна (но сие, по моему - бред) или два фрейма - один с формой ввода и, соответственно, с кодом для записи фраз в общедоступный массив и, второй "самообновляющийся" фрейм (окно), т.е. в данном фреме (окне) должно быть указано в эелементе META конкретное значене Refresh, с кодом вывода массива... Ну что ж, чат у нас, можно сказать, уже работает. Существует окно ввода и окно с фразами, можно писать в первом, что душа пожелает, и наблюдать начертанное во втором. Ну просто верх творения ума человеческого. Но что-то как-то не совсем... Для начала создадим "неполную" авторизацию пользователя. Для этого создаем стартовую страницу чата (если таковой еще нет) примерно следующим образом:
Далее мастерим сам chat.asp:
Здесь мы, соответственно, создали два фрейма : chatbody.asp - фрейм с фразами, chatinput.asp - фрейм с полем ввода. Теперь добавим немного кода в chat.asp и создадим ту самую "неполную" авторизацию:
И что же мы сделали? Всего навсего зверски выпытали у входящего пользователя его имя и решили его запомнить хорошенько, заодно предупредив находящихся уже в чате о его прибытии:
Для чего здесь служит Session-переменная dooropen? А вы попробуйте ее не использовать? И тогда при каждом обновлении родительского окна, тоесть chat.asp будете получать событие входа нового пользователя. Пока вся система еще только лишь во всеуслышанье извещает о сим факте - ничего ужастного в этом, в принципе, и нет, а что будет дальше? А вот при таком простом подходе один раз занесем значение единицы в Session-переменную и, пока не будет уничтожена сессия, dooropen будет его хранить, не давая тем самым ложных входов. Стоит заметить, что в файле global.asa следует все же создать процедуру Session_OnStart и указать в ней Session("dooropen") = 0, я бы еще посоветовал тут же конкретизировать таймауты сессии ( Session.Timeout = 10 ), но сие не к спеху. Ну, пожайлуй, для начала хватит. Разве что свериться кодами с chatinput.asp (chatbody.asp, отвечающего за вывод фраз на экран пользователя) мы не планировали изменять. У вас в chatinput.asp должно быть примерно следующее:
Надеюсь, что данный код не столь уж и непонятен :-). Мир прекрасен и удивителен. Все работает, все крутится и вертится. Но, пора и задуматься (пока еще не поздно и не жалко выбрасывать в корзину готовый программный код), а зачем все это надо? Не проще ли использовать Microsoft Chat или, скажем, Mirc? Взял, поставил, запустил - и без проблем... Сей вопрос волнует умы уже давно и весьма спорен по своей сути. Во-первых, все зависит от того, с какой точки зрения к этому подходить. Если с точки зрения творчества - то тут уж кому что нравится (ну вот нравится мне, допустим, писать приложения именно под WEB и все тут). А во-вторых, при использовании уже готовых стандартных средств общения вам придется "подстраиваться" под то что есть (собственной "изюминки" у вас уже не будет). Есть еще пара плюсов использования именно WEB-технологий: это отсутствие "головной боли" с клиентской частью (ну, не совсем, конечно, но все же...) и гибкость интрефейса при использовании HTML. На самом же деле, любой создатель сайта почему-то строит свой сервер именно под WEB и именно под "стандартные" браузеры, а не создает свои протоколы, клиенты, языки и так далее. Не стоит ли задуматься над этим? Ну да ладно, хватит пререливать из пустого в порожнее, пора заняться созданием той самой "изюминки". Здесь сразу нужно определиться, для чего и почему вы создаете свой чат-сервер. В подобной ситуации можно идти двумя путями: придумать сногсшибательное название, а потом выстроить все остальное в соответствии с ним, или наоборот - выстроить четкую структуру, а потом уже ломать голову над тем, как все это безобразие обозвать :-)). Кстати, сие вполне серьезно. Если вы в самом начале решили обозвать свое творение "Отель у погибшего альпиниста", то вряд ли в него впишутся всякие рыцари и драконы. Вас просто не поймут. Не стану склонять вас ни к тому ни к другому варианту, дам для начала пару рекомендаций в построении общей виртуальной структуры:
Для наглядности могу привести пример собственного чат-сервера. В виду того, что угораздило меня родиться потомственным железнодорожником в третьем поколении (сам бог велел не в космонавты ломиться, раз уж дед, отец и мать более полувека на стальных магистралях). То и далеко ходить не стал. Нарек чат " Станция Гадюкино". Отсюда и всяческие паравозы с кастылями в дизайне, дежурный по станции - бот в чате, статус администрадора - ДС (для непосвященных, ДС по жд абревиатуре - начальник станции) ну и так далее (самый младший статус, кстати, стрелочник :-))) ... Ну что, пофантазировали? Нарисовали себе целый виртуальный мир, который будет "жить" на вашем сервере, подчиняясь созданным вами (или уже самими пользователями) законам, с прекрасными замками и простыми лачугами, с базарными площадями, полицейскими участками и судами, многопартийностью и всяким прочим хламом? :-) Теперь хоть до самого утра мне можете рисовать прелести всяких мирков и мелкомягких чатов, такого там нет и пока не предвидется :-)). Желательно нарисовать всю эту красоту на бумажке и повесить на стену - уже пол - дела, можно сказать, сделано :-). Здесь дам пару советов: во-первых, не стоит сразу хвататься за все это великолепие, каким бы сильным программистом вы себя не считали, задача (по закону того же Мерфи) приобретет умопомрпачительные размеры и погребет вас под собой, во-вторых, идеальный ход и, по настоящему программистский, если вы изначально разработаете модульную структуру вашего проекта, при которой к основному ядру можно будет поэтапно "цеплять" готовые модули, наращивая и увеличивая ваш чат. Попутно стоит решить вопрос с администрированием, вернее с модераторством (если у вас, конечно, нет желания стать второй кроваткой). Для чего, скорее всего, придется строить иерархическую структуру статусов (сами-то вы вряд ли будете 24 часа в сутки следить за порядком). Тем более, что наличие статусов придает некую привлекательность серверу и стимулирует пользовательскую активность. Далее, если вы решили не ограничивать себя только парой-тройкой окон в чате с полем ввода и общим окном, то должен быть проработан механизм свзяывания чего-то "дополнительного" (я уж не знаю, что вам там взбредет в голову - виртуальное казино или просто сервер рассылки поздравительных открыток). Нужно всегда помнить, что основа всего - ЧАТ-СЕРВЕР. Иначе вы рискуете лишится определенного количества пользователей - часть совсем уйдет искать удачу на зеленом сукне вашего казино, часть просто будет перекладывать ваши поздравительные открытки. Поэтому и связывайте все это соответственно. Можно поступить весьма неоригинально, применив стандартный человеческий подход. Догадались, какой? :-)) Да просто взять и ввести национальную валюту, прочно привязанную к чат-серверу. Можете ее накручивать за проведенное время в чате или ею жалование администраторам выдавать - вариантов море. Заодно и игра в казино приобретет по настоящему азартный характер, да и открытки перестанут быть "халявными". Чтобы не пропали труды предыдущей статьи даром, сразу займемся интеграцией проделанного в уже работающий чат. Первое, что необходимо, это сослаться на регистрационную форму со стартовой страницы и обязательно добавить к полю имени поле пароля при входе. Дальше, как многие уже догадались, нужно изменить родительский файл chat.asp. Чем мы сейчас и займемся.
Ну вот, теперь для того чтобы войти пользователь должен быть зарегистрированным и вводить свои логин и пароль (в принципе, можете и оставить вход для так называемого гвеста, т.е. незарегистрированного пользователя). Далее... Раз уж мы предложили пользователю выбирать цвет его сообщений при регистрации, то, наверное, стоит сделать так, чтобы его сообщения появлялись на экране именно с этим цветом. Для этого нам стоит немного добавить в исходный код chatinput.asp.
Всего лишь одна строчка, но сколько вострога :-))... Теперь, я думаю, пора взяться и за chatuser.asp. Во-первых, стоит предусмотреть возможность предосмотра информации о каждом пользователе остальными, а во-вторых, неплохо было бы сделать некоторое различие по половому признаку, раз уж он у нас есть в базе. Для этого предлагаю для начала каждому пользователю в списке рисовать картинку в зависимости от его пола, которая в то же время будет ссылкой на информацию об этом пользователе (не мудурствуя лукаво - <img src="man.jpg"> и <img src="woman.jpg">).
Для того что бы и новый chat.asp и новый chatuser.asp были работоспособными, конечно же нужно добавить в global.asa объявление новoго общедоступного массива GenderUser:
Теперь наш список пользователей дополнился картинками, несущими в себе информацию о том, мальчик это или девочка (кстати, пользователь при регистрации может заполнить и любой другой пол - так что можно ввести и третью картинку), а так же появилась возможность посмотреть информацию об этих мальчиках и девочках. Или еще не появилась? Действительно, не хватает файла infouser.asp. Если чего-то не хватает, то это или нужно срочно найти или создать самому. Предлагаю второе:
Ну, пожалуй, на сегодня все... Продолжение следует...
|
|