Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TELIRCClient.ParseServerResponse(const aText: string);
- var
- R: TResponse;
- a, b: integer;
- l: integer;
- NumCmd: integer;
- begin
- if (Connected = False) then
- Exit;
- R.Count := 0;
- R.Str := aText;
- a := 1;
- b := 1;
- l := Length(aText);
- while (a <= l) do
- begin
- if (aText[a] = CSpace) then
- begin
- if (b < a) then
- begin
- // Command separated by space
- if (R.Cmd = CEmpty) then
- begin
- R.Cmd := Copy(aText, b, a - b);
- Inc(a);
- b := a;
- end
- else
- begin
- R.Add(Copy(aText, b, a - b));
- Inc(a);
- b := a;
- end;
- end
- else
- begin
- // Consequitive space, trim it.
- Inc(a);
- b := a;
- end;
- end
- else
- if (aText[a] = CColon) then
- begin
- if (a = 1) and (R.Prefix = CEmpty) then
- begin
- // Message prefix
- Inc(a);
- b := a;
- while (a <= l) do
- begin
- if (aText[a] = CSpace) then
- begin
- R.Prefix := Copy(aText, b, a - b);
- Inc(a);
- b := a;
- Break;
- end
- else
- Inc(a);
- end;
- end
- else
- begin
- // Last parameter
- if (b = a) then
- begin
- Inc(a);
- b := a;
- R.Add(Copy(aText, b, MaxInt));
- a := l + 1;
- b := l + 1;
- Break;
- end
- else
- begin
- R.Add(Copy(aText, b, MaxInt));
- Inc(a);
- b := a;
- end;
- end;
- end
- else
- Inc(a);
- end;
- if (b < a) then
- R.Add(Copy(aText, b, a));
- // Handle server messages
- if (SameText(R.Cmd, CPING)) then { PING }
- begin
- if (R.Count > 0) then
- Self.Raw(CPONG + CSpace + CColon + R.Get(0))
- else
- Self.Raw(CPONG);
- end
- else
- if (SameText(R.Cmd, CPRIVMSG)) then { PRIVMSG }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CNOTICE)) then { NOTICE }
- begin
- DoOnNotice(R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CJOIN)) then { JOIN }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CPART)) then { PART }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CKICK)) then { KICK }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CMODE)) then { MODE }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CNICK)) then { NICK }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CQUIT)) then { QUIT }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CINVITE)) then { INVITE }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CKILL)) then { KILL }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CWALLOPS)) then { WALLOPS }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- if (SameText(R.Cmd, CTOPIC)) then { TOPIC }
- begin
- DoOnPrivMsg(R.Nick, R.Prefix, R.Get(0), R.Get(1));
- end
- else
- begin
- NumCmd := StrToIntDef(R.Cmd, 0);
- case NumCmd of
- 001: ; { RPL_WELCOME }
- 002: ; { RPL_YOURHOST }
- 003: ; { RPL_CREATED }
- 004: ; { RPL_MYINFO }
- 219: ; { ENDOFSTATS }
- 235: ; { SERVLISTEND }
- 301: ; { AWAY }
- 302: ; { USERHOST }
- 303: ; { ISON }
- 305: ; { UNAWAY }
- 306: ; { NOWAWAY }
- 311: ; { WHOISUSER }
- 312: ; { WHOISSERVER }
- 313: ; { WHOISOPERATOR }
- 314: ; { WHOWASUSER }
- 315: ; { ENDOFWHO }
- 318: ; { ENDOFWHOIS }
- 322: ; { LIST }
- 323: ; { LISTEND }
- 324: ; { CHANMODEIS }
- 331: ; { NOTOPIC }
- 341: ; { INVITING }
- 342: ; { SUMMONING }
- 347: ; { ENDOFINVITELIST }
- 349: ; { ENDOFEXCEPTLIST }
- 351: ; { SVERSION }
- 365: ; { ENDOFLINKS }
- 366: ; { ENDOFNAMES }
- 368: ; { ENDOFBANLIST }
- 369: ; { ENDOFWHOWAS }
- 374: ; { ENDOFINFO }
- 376: ; { ENDOFMOTD }
- 381: ; { YOUREOPER }
- 382: ; { REHASHING }
- 383: ; { YOUARESERVICE }
- 391: ; { STIME }
- 394: ; { ENDOFUSERS }
- 006, 007: { MAP }
- begin
- { Not Implemented }
- end;
- 005, 400..424, 437..502: { Server errors }
- begin
- end;
- 431..433, 436: { Nickname error }
- begin
- end;
- else
- DoOnUnhandledReply(R.Str);
- end; { case }
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement