Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2010, 01:19   #321
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию ;(

Вот как достало незнание сокетов да и само программирование слабое думаю нужно читать читать и еще раз читать! Что-то я слышал веббраузер
заменяет это дело по смайлам а насчет регистрации можно что нибудь зделать или базу какую нибудь писать или что? можете пример легкий привести
errorrr вне форума Ответить с цитированием
Старый 05.03.2010, 01:33   #322
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию !!!

Чуть не забыл в userlistview там находятся ники юзеров как запретить их стирать или изменять
errorrr вне форума Ответить с цитированием
Старый 05.03.2010, 07:13   #323
mishqa35
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 10
По умолчанию

Beermonza, все заработало, картинки меняются, но вот не знаю как сделать чтобы при подключении нового юзера у него отображались картинки с выставленными статусами и собственно у тех узеров которые подключены статус не сбрасывался.

Цитата:
procedure TForm1.StatusBoxChange(Sender: TObject); - ошибки, с сервера приписка UserMas[i].Name. Разослать с сервера нужно всем, без условий, поскольку каналы числятся на клиентах.
Не понял, можно исправленный код увидеть?

Последний раз редактировалось mishqa35; 05.03.2010 в 07:19.
mishqa35 вне форума Ответить с цитированием
Старый 05.03.2010, 14:57   #324
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию ***

Уважаемый Beermonza а можно вместо
Цитата:
TRxRichEdit если пользуете, то вставлять картинки можно. Создайте формочку, поместите туда сколько нужно объектов Image, закиньте в них все смайлики, на клик по Image запишите переброс некоторого кода в текст сообщения. Создайте процедуру сканирования пришедшего сообщения на потенциальный код смайлика.
Вот это все переделать под веббраузер

Последний раз редактировалось Beermonza; 05.03.2010 в 15:54.
errorrr вне форума Ответить с цитированием
Старый 05.03.2010, 15:52   #325
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от errorrr Посмотреть сообщение
Чуть не забыл в userlistview там находятся ники юзеров как запретить их стирать или изменять
В последнем исходнике установлен запрет на изменение: ReadOnly = True

Цитата:
Сообщение от mishqa35
Цитата:
Сообщение от Beermonza
procedure TForm1.StatusBoxChange(Sender: TObject); - ошибки, с сервера приписка UserMas[i].Name. Разослать с сервера нужно всем, без условий, поскольку каналы числятся на клиентах.
Не понял, можно исправленный код увидеть?
Сервер должен отсылать команду смены статуса всем, без исключений:

Код:
// если я сервер
If ServerSocket.Active then
  begin
    For j := 0 to ServerSocket.Socket.ActiveConnections -1 do
      Begin
        ServerSocket.Socket.Connections[j].SendText('4'+IntToStr(StatusBox.ItemIndex)+Setting.NickEdit.Text);
      end;
  end
...
Цикл по числу каналов, сервер к нему не относится, поэтому прежнее условие If (j+1) <> i then не корректно, оно отсекает в некоторый момент попытки пользователей передать запросы, если в это же время сервер изменит свой статус. Аналогично у сервера ServerTimerTimer на рассылку Case 4:, без условия If (j+1) <> i then.

Вот тут ошибка техническая:
Код:
else // если нет
  begin
    ClientSocket.Socket.SendText('4'+IntToStr(StatusBox.ItemIndex)+UserMas[i].Name);
  end;
end;
У клиента нет массива UserMas, он серверный, ...разумеется ошибки не выдает, поскольку код для Delphi общий, но технически это разные приложения.

Код:
ClientSocket.Socket.SendText('4'+IntToStr(StatusBox.ItemIndex);
...клиент шлет только 2 байта, ...ник дописывает сервер, и рассылает всем, без исключений:

Код:
// разошлем всем пользователям (кроме того, кто прислал)
For j := 0 to ServerSocket.Socket.ActiveConnections -1 do
   Begin
      ServerSocket.Socket.Connections[j].SendText('4'+Copy(text, 2, 1)+UserMas[i].Name);
   end;
Понятно, почему ник дописывает сервер?

Цитата:
Сообщение от mishqa35
...картинки меняются, но вот не знаю как сделать чтобы при подключении нового юзера у него отображались картинки с выставленными статусами и собственно у тех узеров которые подключены статус не сбрасывался.
Нужно подправить алгоритм создания списка пользователей, и правильное его считывание.

Смотрим ClientSocketRead, и пакет авторизации:

Код:
// отошлем свой ник на сервер
    1: ClientSocket.Socket.SendText('1'+NikEdit.Text);
...нужно добавить статус, чтобы сервер с ответа клиента знал его статус:

Код:
// отошлем свой ник на сервер
    1: ClientSocket.Socket.SendText('1'+IntToStr(StatusBox.ItemIndex)+NikEdit.Text);
Теперь, чтобы сервер не ошибся с определение ника и статуса ServerTimerTimer:

Код:
// код приема ника клиента -----------------------------------------------------
                1: Begin
// запишем в массив полученный ник
                     UserMas[i].Name:=Copy(text,3,len-1);
// отметим, что пользователь записан в список
                     UserMas[i].Rec:=True;
// смена картинки
                     UserMas[i].Image:=StrToInt(Copy(text,2,1));
// отметим авторизацию счетчиком
                     Inc(Autores);
                   end;
// -----------------------------------------------------------------------------
Смотрим UpdateUserList, нужно добавить статус пользователя в список, который создает сервер:

Код:
// составляем строку пользователей
          StrUserList:=StrUserList+IntToStr(UserMas[i].Image)+UserMas[i].Name+Chr(152);
...в данном случае, перед ником в списке идет номер картинки. Теперь подправляем алгоритм у клиента ClientSocketRead:

Код:
// примем строку списка пользователей
    2: Begin
          ....

// добавим в UserListView строку
                 UItems:=UserListView.Items.Add;
                 UItems.Caption:=Copy(text,pos+1,x-2);
// укажем соответствующую иконку пользователя
                 If pos>2 then UItems.ImageIndex:=StrToInt(Copy(text,pos,1));
Вот, вроде бы и все, ...испытания я не проводил, только теоретически, ...пробуйте, описывайте проблемы, если таковые всплывут.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 05.03.2010 в 18:53.
Beermonza вне форума Ответить с цитированием
Старый 05.03.2010, 15:57   #326
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

errorrr, можно сделать все, но нужны знания (для вас) и время (для меня). Пока оба выстрела в молоко, как вам быть я не знаю, ...возможно, понемногу пользовать что есть.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 05.03.2010, 17:16   #327
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию )))

Вот куда здесь написать что бы ник был когда кто заходи или выходит из чата
Вложения
Тип файла: txt исходник.txt (16.6 Кб, 158 просмотров)
errorrr вне форума Ответить с цитированием
Старый 05.03.2010, 17:54   #328
mishqa35
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 10
По умолчанию

Beermonza, при компиляции вот на этом месте выдает ошибку
Код:
Inc(Autores);
mishqa35 вне форума Ответить с цитированием
Старый 05.03.2010, 18:30   #329
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию хм

Друзья кодеры не хорошо обманывать людей на этом форуме
я хотел применить вашь код а он то не рабочий и не один он половину корявых кодов статусы не работают в чате
я везде добавил пункт 4
вот в таймере добавил // блокируем разрешений
UpdDo:=False;
end;
// восстанавливаем заголовок формы
Form1.Caption:='Test';
end;
4: begin
// добавим себе
ChatMemo.Lines.Add(Copy(text, 2, 1)+' | '+UserMas[i].Name); // тест status | nick
// разошлем всем пользователям (кроме того, кто прислал)
For j := 0 to ServerSocket.Socket.ActiveConnectio ns -1 do
Begin
If (j+1) <> i then ServerSocket.Socket.Connections[j].SendText('4'+Copy(text, 2, 1)+UserMas[i].Name);
end;
// меняем статус
If UserListView.Items.Item[j].Caption = Copy(text, 3, Length(text)-2) then
Begin
UserListView.Items.Item[j].ImageIndex := StrToInt(Copy(text, 2, 1));
end;


procedure TForm1.UserListViewClick(Sender: TObject);
begin
errorrr вне форума Ответить с цитированием
Старый 05.03.2010, 18:31   #330
errorrr
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 12
По умолчанию

procedure TForm1.StatusComboBoxChange(Sender: TObject);
// если я сервер
If ServerSocket.Active <> false then
begin
For j := 0 to ServerSocket.Socket.ActiveConnectio ns -1 do
Begin
If (j+1) <> i then ServerSocket.Socket.Connections[j].SendText('4'+IntToStr(StatusBox.It emIndex)+Setting.NickEdit.Text);
end;
end
else // если нет
begin
ClientSocket.Socket.SendText('4'+In tToStr(StatusBox.ItemIndex)+UserMas[i].Name);
end;
end;

end.
errorrr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17