Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Chat 
V
    Опции темы
klyxa
Дата 17.8.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Народ помогите плз:
я хочу написать что то типа чата для усвоения так сказать изученного.
Создал сервер, он принимает сообщения от пользователей
Создал "удаленный объект", обозначил в нем метод отправки сообщение серверу.
И собственно сам клиент для отправки сообщений
Тоесть я могу тока отпралвять сообщения на сервер, а вот как сделать чтобы сервер отправлял новое сообщение всем клиентам...я думаю типа можно создать новый метод типа getNewMess и загнать его в вечный цикл чтоли в каждом клинте, чтобы тот спрашивал сервера на нов. сообщения. но вот как это реализовать я ,к сожалению, не догоняю как. хотябы наведите на мысль если чаво


PM MAIL   Вверх
ivashkanet
Дата 17.8.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(klyxa @  17.8.2006,  12:44 Найти цитируемый пост)
я думаю типа можно создать новый метод типа getNewMess и загнать его в вечный цикл чтоли в каждом клинте, чтобы тот спрашивал сервера на нов. сообщения. 

Отличная идея, только я бы на таймер повесил или в отдельный поток.
getNewMess(int lastReceivedMessageNumber)
Что-то типа того: Все сообщения нумеруются. Ты запрашиваешь новые, а в качестве критерия отбора этих новых сообщений ты передаешь номер последнего принятого сообщения.
P.S. ИМХО, это все лучше делать через Web-сервис. На .Net в несколько сотен строк будет  smile 
PM MAIL WWW ICQ   Вверх
klyxa
Дата 17.8.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



а скажи плз как сие моно в цикл или в таймер загнать, хотябы какой класс тады юзать. просто типа
for(int i > 0; ;i++)
{
   getNewMess();
}
это помоему чето не то=)
PM MAIL   Вверх
mr.DUDA
Дата 17.8.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(klyxa @  17.8.2006,  12:44 Найти цитируемый пост)
Тоесть я могу тока отпралвять сообщения на сервер, а вот как сделать чтобы сервер отправлял новое сообщение всем клиентам...я думаю типа можно создать новый метод типа getNewMess и загнать его в вечный цикл чтоли в каждом клинте, чтобы тот спрашивал сервера на нов. сообщения. но вот как это реализовать я ,к сожалению, не догоняю как. хотябы наведите на мысль если чаво

Можно в цикле опрашивать сервер, но если по уму делать - есть такие протоколы как UDP и Multicast - рассылка сообщений кому попало (UDP) и выбранным IP-адресам (Multicast). Правда, особо не вдавался как это на .NET реализовано, примеры есть в MSDN в описании класса MulticastOption и UdpClient.

Цитата(ivashkanet @  17.8.2006,  12:50 Найти цитируемый пост)
P.S. ИМХО, это все лучше делать через Web-сервис. На .Net в несколько сотен строк будет

Через remoting будет работать быстрее в десятки раз. И не нужно IIS с ASP.NET ставить и создавать виртуальную директорию.

Цитата(klyxa @  17.8.2006,  15:08 Найти цитируемый пост)
а скажи плз как сие моно в цикл или в таймер загнать, хотябы какой класс тады юзать. просто типаfor(int i > 0; ;i++){   getNewMess();}это помоему чето не то=)

То самое, только задержку поставь Thread.Sleep(пауза) smile


--------------------
user posted image
PM MAIL WWW   Вверх
klyxa
Дата 17.8.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



=) Пасип за помощь всема ;)

Добавлено @ 15:51 
а еще тады вопрос:
нумерация сообщений, это дело как вапще лучше реализовать? я думаю чето то типа списки или например с помощью функции(explode) как в пхп. Кстэ, а может типа создать массив и посредством индекса выходить на нужный элемент, тобишь сообщение?
PM MAIL   Вверх
ivashkanet
Дата 17.8.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  17.8.2006,  15:34 Найти цитируемый пост)
Через remoting будет работать быстрее в десятки раз. И не нужно IIS с ASP.NET ставить и создавать виртуальную директорию.

Ну да, у нас же есть приложение. Я чё-то подумал, что чат будет из броузера smile 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 17.8.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(klyxa @  17.8.2006,  15:36 Найти цитируемый пост)
а еще тады вопрос:нумерация сообщений, это дело как вапще лучше реализовать? я думаю чето то типа списки или например с помощью функции(explode) как в пхп. Кстэ, а может типа создать массив и посредством индекса выходить на нужный элемент, тобишь сообщение?

Сообщения живут на сервере, поэтому особой нужды в хитрой их идентификации нет. Сделай статик-переменную типа list<ChatMessage>, где ChatMessage - к примеру структура, содержащая поля Author, Time, MessageStr, IsPrivateMsg, и т.п.


--------------------
user posted image
PM MAIL WWW   Вверх
klyxa
Дата 18.8.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



вот смари я написал код, который спрашивает номер последнего сообщения, если номера последних сообщений совпадают, то ниче не происходит. а если разные то клиент запрашивает последнее сообщение. но вот если я все это дело загоняю в цикл..то полная жопа извините меня, сервак спокойно "падает" и усе. подскажи чаво делать. вот сорц на всяк случай:

Код

                Thread.Sleep(1000);
                GetNM gnDelegate = new GetNM(obj.getNofLM);  // вызваем функцию, кот возвращет номер послед сообщен
                IAsyncResult gnAsyncres = gnDelegate.BeginInvoke(null, null);
                int lm = gnDelegate.EndInvoke(gnAsyncres); //получаем ответ
                lm -= 1;

                
                if (lm == lastmess)
                {
                    label1.Text = "Anything new";
                }
                else
                {
                    GetM gnmDelegate = new GetM(obj.getNewMess); // вызываем функцию, для получ нов сообщения
                    IAsyncResult svAsyncres = gnmDelegate.BeginInvoke(lm, null, null); //передаем номер сообщения
                    string msg = gnmDelegate.EndInvoke(svAsyncres);  // получаем ответ

                    BeginInvoke(new SetText(SetLBT), new object[] { msg }); // и загоняем этот месадж в листбокс
                    lastmess++;
                    
                }



а вот если все это дело в:
Код

for(int i=0; ;i++)
{
// code..
}


то жопа, хелп плз
PM MAIL   Вверх
Exception
Дата 18.8.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



http://www.rsdn.ru/article/dotnet/dotnetchat.xml
Советую почитать.
PM   Вверх
klyxa
Дата 18.8.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



блин там на VB. да и ваще не проще сказать в чем ошибка или че поправить. потом че надо я сам сделаю
PM MAIL   Вверх
ivashkanet
Дата 18.8.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Что-то мне кажется ты наплодил тучу потоков, а ни один не закрываешь  smile 
Цитата(klyxa @  18.8.2006,  11:34 Найти цитируемый пост)
 GetNM gnDelegate = new GetNM(obj.getNofLM);  // вызваем функцию, кот возвращет номер послед сообщен                
IAsyncResult gnAsyncres = gnDelegate.BeginInvoke(null, null);

P.S. klyxa, кстати отличная статья smile

Добавлено @ 14:28 
Цитата(ivashkanet @  18.8.2006,  14:25 Найти цитируемый пост)
Что-то мне кажется ты наплодил тучу потоков, а ни один не закрываешь

Нет, закрываешь  smile 
PM MAIL WWW ICQ   Вверх
klyxa
Дата 18.8.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



блин, да мнеб сделать чтоб этот код нормально выполнялся и все. а дальше я уже придумаю. главное основу зафигачить
PM MAIL   Вверх
klyxa
Дата 19.8.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



народ!как сделать чтобы данный код постоянно выполнялся и сервер не "падал"?
PM MAIL   Вверх
mr.DUDA
Дата 19.8.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(klyxa @  19.8.2006,  21:38 Найти цитируемый пост)
народ!как сделать чтобы данный код постоянно выполнялся и сервер не "падал"?

Если хочешь получить ответ, давай полные исходники сервера и клиента.


--------------------
user posted image
PM MAIL WWW   Вверх
klyxa
Дата 20.8.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



о я додумался загнать "опрос" сервера в отдельный поток и вуаля!=)
ЗЫ спасиб всема
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.