![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Michele |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.2.2008 Репутация: нет Всего: нет |
Пишу сейчас Instant Messanger на сокетах с собственным сервером, который связан с БД пользователей. Сервер реализован как консольное приложение + отдельно реализована клиентская часть. На каждого подключенного клиента создается отдельный поток, все потоки содержатся в List<ProtocolService>. ProtocolService - Класс в серверной части, обеспечивающий работу и обслуживание одного подключённого клиента. При отправке сообщения от одного клиента другому на данном этапе разработки
В классе IMServer реализован серверный поток обслуживания новых клиентов. При подключении нового клиента для него создается новый класс ProtocolService, в котором реализован поток обслуживания данного подключенного клиента. В buff содержится набор данных от клиента в виде потока байт, первый байт которого содержит информацию о типе запроса или данных (на аворизацию, загрузку контакт листа.. а также отправку сообщения) switch ((Protocol.ProtocolCommands)buff[0]) { case Protocol.ProtocolCommands.ToAuthenticate:{} // Клиент отправляет сообщение другому клиенту через сервер case Protocol.ProtocolCommands.ToSendMessage: if (auth != null) { IMMessage msg = IMMessage.GetMessageFromBytes(buff, 1); msgStorage.AddIMMassage(msg); 1) // ? IMServer ss1 = new IMServer(); 2) // ? ss1.proc(msg); } else SendStringToClient("You are not authenticated."); break; 2)- обращение к процедуре отправки сообщения в IMServer 1) - создание нового IMServer Внутри класса ProtocolService передать сообщение другому клиенту мне кажется невозможно (если вы считаете по-другому, напишите пожалуйста). Мне кажется целесообразнее отправлять сообщения из класса IMServer, но когда мы передаем сообщение из класса ProtocolService в класс IMServer, мы создаем новый класс IMServer, а не возвращаемся в тот, который создал текущий ProtocolService. Как можно обойти этот момент, потому как новый класс пустой и не содержит никакой информации? |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |