![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сетевая игра :) [D7, WinXP]
Станислав © (2005-09-04 23:06:00)Здраствуйте. Вот решил попробывать себя в разработке сетевой игры и сразу возникло пару вопросов:
1. как организовать процедуру логина игрока (со стороны сервера и клиента)
2. подскажите как лучше передавать данные (там в рекорде каком нибудь наверное, а не строкой %)... )
заранее спасибо!
p.s. использую синхронные сокеты tcp/ip (компоненты Indy)
Digitman (2005-09-06 17:51:00) [1]
> Joker666 (06.09.05 17:31) [12]
то и значит, что указатель имеют смысл в адресном пространстве только того процесса, в котором этот указатель получен
Signate (2005-09-06 17:33:00) [2]
> C#-Layer :) (06.09.05 16:45) [10]
пока еще нечего показывать... почти все еще в теории
Joker666 (2005-09-06 17:31:00) [3]
> указатель в одном АП не имеет смысла в другом
что это значит?
Digitman (2005-09-06 17:04:00) [4]
> Signate © (06.09.05 14:35) [9]
1.
> Thread : Pointer
указатель в одном АП не имеет смысла в другом
2.
TClient = packedrecord
C#-Layer :) (2005-09-06 16:45:00) [5]Если возможно, выложите пожалоуста что получилось или отправте на мыло : slstudioi_a@mail.ru
Signate (2005-09-06 14:35:00) [6]а еще вопрос...
в моем примере сервера одного клиента описывает следующая структура
TClient = record // Object holding data of client (see events)
DNS : String[20]; { Hostname }
Connected, { Time of connect }
LastAction : TDateTime; { Time of last transaction }
Thread : Pointer; { Pointer to thread }
end;
стоит ли в эту структуру добавлять переменные типа : жизни игрока, его имени, etc... или стоит под это дело заводить отдельную структуру и добавлять ее в какой нибудь массив при коннекте клиента и удалять при дисконнекте?
Digitman (2005-09-05 13:35:00) [7]
> Станислав (05.09.05 13:21) [7]
да, разумеется
Станислав (2005-09-05 13:21:00) [8]а вот если я буду использовать выше написанный код, то клиент будет посылать сначала TCmdPrefix, а след. строкой уже само сообщение?
Станислав (2005-09-05 10:28:00) [9]о великий Digitman :) Как все логично получилось! Спасибо огромное :)) Если есть свободное время - можно пообщаться в аське или по мылу! Идеи по созданию игры грандиозные, а людей всего 2 штуки...
Digitman (2005-09-05 10:18:00) [10]type
TCommands = (cmdLogin, cmdPoint, cmdPoints);
TCmdPrefix = packed record
Command: TCommands;
ParamSize: Integer;
end;
TCmdLogin = packed record
UserName: string[16];
Password: string[16];
end;
var
CmdPrefix: TCmdPrefix;
CmdLogin: TCmdLogin;
CmdPoint: TPoint;
CmdPoints: array of TPoint;
cnt: Integer;
...
AThread.Connection.ReadBuffer (CmdPrefix, SizeOf(CmdPrefix));
case CmdPrefix.Command of
cmdLogin: AThread.Connection.ReadBuffer(CmdLogin, SizeOf(CmdLogin));
cmdPoint: AThread.Connection.ReadBuffer(CmdPoint, SizeOf(CmdPoint));
cmdPoints:
begin
cnt := ParamSize div SizeOf(TPoint);
SetLength(CmdPoints, cnt);
AThread.Connection.ReadBuffer(PPoint(@CmdPoints[0])^, ParamSize);
end;
end;
Станислав (2005-09-05 09:47:00) [11]да...
просто я не знаю как надо правильно делать...
нужна ли везде единая структура данный или под передачу координат - одна, под передачу сообщений чата - другая....
как в таком случае сервер будет правильно их получать если код приемы выглядит примерно так:
AThread.Connection.ReadBuffer (TMsg, SizeOf (TMsg));
Digitman (2005-09-05 09:24:00) [12]
> такая структура наверное неверно составлена?
а что это за структура ?
где она фигурирует в твоем протоколе инф.обмена между сервером и клиентом ?
Станислав (2005-09-05 09:10:00) [13]Вот собственно с помощью какой?... Например как лучше передать допустим координаты игрока в 2д пространстве?...
А под логином я подразумивал авторизацию игрока на сервере с помощью имени и пароля. Будет ли такой алгоритм правильным:
1. пользователь подключаеться к серверу
2. пользователь отправляет пакаеты с именем и паролем
3. если комбинация имя/пароль правильная, то допустим поменять флаг Authorized на true, а в противном случае disconnect();
p.s. такая структура наверное неверно составлена?
TMsg = record
Command: byte;
UserName: string[100];
data: array of byte[1..1024];
end;
Eraser (2005-09-05 01:30:00) [14]Станислав (04.09.05 23:06)
1. Логин может быть только со стороны клиента, по определению.
2. Конечно лучше с пом. какой-то структуры.
p.s. использую синхронные сокеты tcp/ip (компоненты Indy)
вот это правильно.