Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

сетевая игра :)   Найти похожие ветки 

 
Станислав   (2005-09-04 23:06) [0]

Здраствуйте. Вот решил попробывать себя в разработке сетевой игры и сразу возникло пару вопросов:
1. как организовать процедуру логина игрока (со стороны сервера и клиента)
2. подскажите как лучше передавать данные (там в рекорде каком нибудь наверное, а не строкой %)... )

заранее спасибо!

p.s. использую синхронные сокеты tcp/ip (компоненты Indy)


 
Eraser ©   (2005-09-05 01:30) [1]

Станислав   (04.09.05 23:06)

1. Логин может быть только со стороны клиента, по определению.
2. Конечно лучше с пом. какой-то структуры.

p.s. использую синхронные сокеты tcp/ip (компоненты Indy)

вот это правильно.


 
Станислав   (2005-09-05 09:10) [2]

Вот собственно с помощью какой?... Например как лучше передать допустим координаты игрока в 2д пространстве?...

А под логином я подразумивал авторизацию игрока на сервере с помощью имени и пароля. Будет ли такой алгоритм правильным:

1. пользователь подключаеться к серверу
2. пользователь отправляет пакаеты с именем и паролем
3. если комбинация имя/пароль правильная, то допустим поменять флаг Authorized на true, а в противном случае disconnect();

p.s. такая структура наверное неверно составлена?

TMsg = record
     Command: byte;
     UserName: string[100];
     data: array of byte[1..1024];
end;


 
Digitman ©   (2005-09-05 09:24) [3]


> такая структура наверное неверно составлена?


а что это за структура ?
где она фигурирует в твоем протоколе инф.обмена между сервером и клиентом ?


 
Станислав   (2005-09-05 09:47) [4]

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

как в таком случае сервер будет правильно их получать если код приемы выглядит примерно так:

AThread.Connection.ReadBuffer (TMsg, SizeOf (TMsg));


 
Digitman ©   (2005-09-05 10:18) [5]

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 10:28) [6]

о великий Digitman :) Как все логично получилось! Спасибо огромное :)) Если есть свободное время - можно пообщаться в аське или по мылу! Идеи по созданию игры грандиозные, а людей всего 2 штуки...


 
Станислав   (2005-09-05 13:21) [7]

а вот если я буду использовать выше написанный код, то клиент будет посылать сначала TCmdPrefix, а след. строкой уже само сообщение?


 
Digitman ©   (2005-09-05 13:35) [8]


> Станислав   (05.09.05 13:21) [7]


да, разумеется


 
Signate ©   (2005-09-06 14:35) [9]

а еще вопрос...
в моем примере сервера одного клиента описывает следующая структура


 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... или стоит под это дело заводить отдельную структуру и добавлять ее в какой нибудь массив при коннекте клиента и удалять при дисконнекте?


 
C#-Layer :)   (2005-09-06 16:45) [10]

Если возможно, выложите пожалоуста что получилось или отправте на мыло : slstudioi_a@mail.ru


 
Digitman ©   (2005-09-06 17:04) [11]


> Signate ©   (06.09.05 14:35) [9]


1.


> Thread      : Pointer


указатель в одном АП не имеет смысла в другом

2.

TClient   = packed record


 
Joker666   (2005-09-06 17:31) [12]


> указатель в одном АП не имеет смысла в другом

что это значит?


 
Signate ©   (2005-09-06 17:33) [13]


> C#-Layer :)   (06.09.05 16:45) [10]


пока еще нечего показывать... почти все еще в теории


 
Digitman ©   (2005-09-06 17:51) [14]


> Joker666   (06.09.05 17:31) [12]


то и значит, что указатель имеют смысл в адресном пространстве только того процесса, в котором этот указатель получен



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
1-1132244343
VEZ
2005-11-17 19:19
2005.12.18
Как програмно перевести определённый Node в TTreeView в состояние


2-1133192716
Yurij-7
2005-11-28 18:45
2005.12.18
INSERT, поля суммы и даты


14-1132911097
Koala
2005-11-25 12:31
2005.12.18
Срочно!!! Нужна помощь в востановлении данных....


9-1122218078
Большой Брат
2005-07-24 19:14
2005.12.18
Антилязинг


14-1132262245
Kerk
2005-11-18 00:17
2005.12.18
kladovka + delphibase