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

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

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2011, 14:48   #21
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
ПИО кривой.
Скажи пожалуйсто, что это значит? Расскажи по подробнее, и как исправить.
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 28.08.2011, 12:06   #22
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию Как можно это оптимизировать?

Код:
type
TStatusMode = (CONNECTION, KICK, RESET, SHUTDOWN, DEBUG, RUN, UNKNOWN );

var
  len:integer;
  sss:Ansistring;
  fileC:TextFile;
  kickString:string;
  NewUser : TUser;
  Key : HKey;
  Registry: TRegistry;
  phandle : HWND;
  StatusMode : TStatusMode;
begin
SetLength(sss, Socket.ReceiveLength);
SetLength(sss, Socket.ReceiveBuf(Pointer(sss)^, Length(sss)));
len:=Length(sss);
if Copy(sss,1,1)<>'/' then StatusMode:=CONNECTION;
if Copy(sss,1,6)='/kick ' then  StatusMode:=KICK;
if Copy(sss,1,6)='/reset' then  StatusMode:=RESET;
if Copy(sss,1,6)='/debug' then  StatusMode:=DEBUG;
if Copy(sss,1,4)='/run' then  StatusMode:=RUN;
case StatusMode of
CONNECTION:
begin
NewUser := TUser.Create;
ActiveConnections:=ActiveConnections+1;
NewUser.Number := ActiveConnections;
NewUser.Socket := Pointer(Socket);
Socket.Data := NewUser;
PlayersCount.Text:=inttostr(ActiveConnections);
TUser(Socket.Data).SuperInf:=sss;
TUser(Socket.Data).Name:=Copy(sss,1,Pos('|',sss)-1);
TUser(Socket.Data).Cheater:=Copy(sss,Pos('|',sss)+1,len-1);
TUser(Socket.Data).Version:=Copy(sss,len-4,len);
len:=Length(TUser(Socket.Data).Cheater);
Delete(TUser(Socket.Data).Cheater,len-4,len);
len:=Length(TUser(Socket.Data).Version);
Delete(TUser(Socket.Data).Version,1,len-4);
len:=Length(TUser(Socket.Data).Version);
Delete(TUser(Socket.Data).Version,len,len);
if TUser(Socket.Data).Cheater<>'Normal' then TUser(Socket.Data).Cheater:='Cheater';
ServerConsole.Lines.Add('['+TimeToStr(Time)+']'+' Игрок '+TUser(Socket.Data).Name+' присоединился, он '+TUser(Socket.Data).Cheater);
ServerS.Socket.Connections[TUser(Socket.Data).Number-1].SendText('Сервер получил ваш запрос...');
if (TUser(Socket.Data).Cheater='Normal') and (TUser(Socket.Data).Version=Version) and (serveroffed=false) then
begin
AssignFile(fileC,TUser(Socket.Data).Name+'.txt');
ReWrite(fileC);
closefile(fileC);
end;
if (TUser(Socket.Data).Version<>Version) then
begin
ServerS.Socket.Connections[TUser(Socket.Data).Number-1].SendText('Версия вашего клиента отличается от нужной');
ServerS.Socket.Connections[TUser(Socket.Data).Number-1].Close;
end
else
begin
TUser(Socket.Data).CountLines:=Server2.PlayerTable.Lines.Count;
Server2.PlayerTable.Lines.Add(TUser(Socket.Data).Name+':'+TUser(Socket.Data).Cheater);
end;
if serveroffed=true then ServerS.Socket.Connections[TUser(Socket.Data).Number-1].SendText('Сервер временно отключен');
end;
KICK:
begin
kickString:=Copy(sss,7,len);
SetCurrentDir(ServerPath+'\scriptfiles\ServerSystem');
if fileexists(kickString+'.txt') then DeleteFile(kickString+'.txt');
end;
SHUTDOWN:
begin
SetCurrentDir(ServerPath+'\scriptfiles');
RemoveAll(ServerPath+'\'+FolderServer);
{$I-}
MkDir(ServerPath+'\scriptfiles\ServerSystem');
{$I+}
ServerOffed:=true;
phandle := Find(PChar(ServerPath+'\'+'server.exe'));
while phandle <> 0 do
begin
SendMessage(phandle, WM_CLOSE, 0, 0);
phandle := Find(PChar(ServerPath+'\'+'server.exe'));
end;
serverconsole.Lines.Add('['+TimeToStr(Time)+']'+' Сервер приостановил свою работу');
end;
RESET:
begin
ServerOffed:=true;
ActiveConnections:=0;
playerscount.Text:='0';
Server2.PlayerTable.Lines.Clear;
SetCurrentDir(ServerPath+'\scriptfiles');
RemoveAll(ServerPath+'\'+FolderServer);
servers.Active:=false;
serverconsole.Lines.Add('['+TimeToStr(Time)+']'+' Сервер перезапущен');
AntiCheat2.PlayerTable.Lines.Clear;
{$I-}
MkDir(ServerPath+'\scriptfiles\ServerSystem');

{$I+}
phandle := Find(PChar(ServerPath+'\'+'server.exe'));
while phandle <> 0 do
begin
SendMessage(phandle, WM_CLOSE, 0, 0);
phandle := Find(PChar(ServerPath+'\'+'server.exe'));
end;
ShellExecute(HInstance,'Open', 'server.exe', nil, PChar(ServerPath+'\'),sw_normal);
SetCurrentDir(ServerPath+'\scriptfiles\');
serveroffed:=false;
servers.Active:=true;
end;
DEBUG:
begin
if serverconsole.Lines.Count>=4 then
begin
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-4]);
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-3]);
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-2]);
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-1]);
end
else
begin
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-2]);
Servers.Socket.Connections[TUser(Socket.Data).Number-1].SendText('%%'+Serverconsole.Lines.Strings[serverconsole.Lines.Count-1]);
end;
end;
RUN:
begin
serveroffed:=false;
ShellExecute(HInstance,'Open', 'server.exe', nil, PChar(ServerPath+'\'),sw_normal);
SetCurrentDir(ServerPath+'\scriptfiles\');
serverconsole.Lines.Add('['+TimeToStr(Time)+']'+' Сервер продолжил свою работу');
end;
end;
end;
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с ServerSocket и ClientSocket ***СкаЙ*** Работа с сетью в Delphi 3 22.05.2010 14:09
[TcpClient, TcpServer] или [ServerSocket, ClientSocket] работа через прокси DOLBY Работа с сетью в Delphi 2 17.09.2009 05:46
Работа с ClientSocket и ServerSocket из консоли D_E_N Работа с сетью в Delphi 6 28.07.2009 00:27
Работа с ServerSocket и ClientSocket AlDelta Работа с сетью в Delphi 12 28.09.2008 11:18
Работа с Clientsocket и Serversocket prizrak1390 Работа с сетью в Delphi 3 26.04.2008 22:59