Komunikator GG

0

Witam :) Jestem tu nowy , to mój 1 post.
Problem:
Napisałem komunikator gg :-) Ma prawie wszystko , ale mam problem z wysyłaniem wiadomości. Program się kompiluję i te sprawy , ale gdy inny program do gg (w moim przypadku AQQ) wysyła wiadomość nie odbiera na początku , bo za 17 razem odbiera mój komunikator [!!!] ale gdy wysyłam wiadomość z mojego komunikatora to moje aqq odbiera. Całość pisałem w Delphi 7 Personal Eddition , gg oparłem na komponencie HGG . Kod źródłowy:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, HGG, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    HGG1: THGG;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    RadioGroup1: TRadioGroup;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Edit4: TEdit;
    Edit5: TEdit;
    Button4: TButton;
    MainMenu1: TMainMenu;
    Kontakty1: TMenuItem;
    Importujzserwera1: TMenuItem;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure HGG1Connected(Sender: TObject);
    procedure HGG1Disconnected(Sender: TObject);
    procedure HGG1Login(Sender: TObject);
    procedure HGG1LoginFailed(Sender: TObject);
    procedure HGG1Message(Sender: TObject; GGNumber: Integer;
      MessageContent: String; MessageTime: TDateTime);
    procedure Button4Click(Sender: TObject);
    procedure Importujzserwera1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
HGG1.Password := Edit2.Text;
HGG1.Number := StrToInt(Edit1.Text);
HGG1.Host := HGG1.GetServerAddress;
HGG1.Connect();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0: HGG1.Status := usAvailable;
1: HGG1.Status := usBusy;
2: HGG1.Status := usInvisible;
3: HGG1.Status := usNotAvailable;
end;
HGG1.Description := Edit3.Text;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
HGG1.Disconnect;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
HGG1.Disconnect;
end;

procedure TForm1.HGG1Connected(Sender: TObject);
begin
ShowMessage('Połączono');
end;

procedure TForm1.HGG1Disconnected(Sender: TObject);
begin
ShowMessage('Rozłączono');
end;

procedure TForm1.HGG1Login(Sender: TObject);
begin
ShowMessage('Zalogowano');
end;

procedure TForm1.HGG1LoginFailed(Sender: TObject);
begin
ShowMessage('Nie zalogowano');
end;

procedure TForm1.HGG1Message(Sender: TObject; GGNumber: Integer;
  MessageContent: String; MessageTime: TDateTime);
begin
Memo1.Lines.Add(IntToStr(GGNumber)+'> '+MessageContent);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
HGG1.SendMessage(StrToInt(Edit4.Text),Edit5.Text,[]);
Memo1.Lines.Add('Ty do '+Edit4.Text+'> '+Edit5.Text);
end;

procedure TForm1.Importujzserwera1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
HGG1.Users.LoadFromFile(OpenDialog1.FileName);
end;
end;
0

Bla Bla Bla :PP codziennie to samo :PP

http://4programmers.net/Forum/viewtopic.php?id=129594&start=0

0

Niestety, ale nikt nie rozwiązał jeszcze tego problemu...

0

Takie małe pytanie do OT do Deti czy twój drugi komponent Do obsługi protokołu gg na plaformnie C# . Net działa prawidłowo ??

0

Ostatnio jak sprawdzałem to działał idealnie. Na dniach pojawi się również mała aktualizacja.

0

<ort>w ogóle </ort>to oryginalny klient gg niemalze natychmiast (od momentu nadania) wyswietla odebrana wiadomosc. hgg wyswietla wiadomosc z pewnym opoznieniem. Ale mniejsza z tym.

Uruchomilem sniffer. Wyslalem do hgg 6 identycznych wiadomosci (jedna i ta sama litere). hgg wyswietlilo w programie ta litere dopiero za 6 razem. Snifer pokazal ze za kazdym razem hgg odebralo 6 identycznych pakietow z serwera (zmienial sie tylko chyba jakis tam numer sekwencyjny - pozostala czesc pakietu byla bez zmian, dlugosc pakietu byla takze identyczna). Dziwne:)

Po ponownym polaczeniu hgg z serverem hgg wyswietlilo w programie odebrana litere dopiero za 5 razem (tym razem dlugosc kolejnych paietow wzrosla). Sniffer pokazal:

In: 0A00 0000 1200 0000 6B1D 2900 18D6 CE01 4CE8 0449 0800 0000 6F00 <- litera o
In: 0A00 0000 1B00 0000 6B1D 2900 18D6 CE01 52E8 0449 0800 0000 6F00 0206 0000 0008 0000 00 <- litera o
In: 0A00 0000 1B00 0000 6B1D 2900 18D6 CE01 56E8 0449 0800 0000 6C00 0206 0000 0008 0000 00 <- litera l
In: 0A00 0000 1B00 0000 6B1D 2900 18D6 CE01 5AE8 0449 0800 0000 6D00 0206 0000 0008 0000 00 <- litera m
In: 0A00 0000 1B00 0000 6B1D 2900 18D6 CE01 5EE8 0449 0800 0000 2000 0206 0000 0008 0000 00 <- wyslalem spacje
Out: 0800 0000 0000 0000

0

Nie wiem gdzie tkwi problem. Jesli protokol gg zmienil by sie na tyle ze hgg nie radzilo by sobie z nim to przy pierwszym tescie gdzie pakiety odebrane mialy ta sama dlugosc i roznily sie tylko numerem sekwencyjnym (tak to sie chyba nazywa?) hgg nie powinno <ort>w ogóle </ort>wyswietlic zadnej wiadomosci albo powinno wysietlac ja za kazdym razem. Tak na chlopski rozum:)

W drugim tescie bylo podobnie, pierwszy odebrany pakiet byl taki jak w pierwszym tescie (ta sama dlugosc i inny tylko numer sekwencyjny). W drugim tescie zmienial sie numer sekwencyjny, kod ASCI litery (ktora byla wysylana) oraz pakiet sie wydluzyl (przy wydluzeniu pakietu 5 bajt zmienil sie z 12 na 1B - ale to chyba nie ma nic do rzeczy w kwesti nie wyswietlania wiadomosci, czyli mozna przyjac ze pakiety sa takie same a raz hgg je wyswietla w programie a raz nie).

Jak hgg w koncu wyswietli jakas wiadomosc to zazwyczaj wyswietla i kazda nastepna.
Wyglada to tak jak by sie hgg jakos zapychalo i jak sie odetka to dziala a jak sie przytka to nie:) Moze hgg liczy jakies sumy kontrolne dla tych pakietow czy jak i raz uda im sie dotrzec do Memo a raz nie. po prostu w ktoryms miejscu w programie one "znikaja jak w czarnej dziurze".

To takie moje obserwacje. Moze to wina Indy jest. Nie wiem czy deti piszac hggsharp wzorowal sie na hgg, czy nie. Ale jak hggsharp dziala a hgg nie to wedlug mnie Deti powinien wieedziec gdzie jest pies pogrzebany.

0

Problem w tym, że nie mam Delphi, ani też specjalnie chęci instalowania go.

Proponuje postawić debugger i zrzucić do pliku dane wejściowe w następującym miejscu (HGG):

procedure TTCPResolver.Execute;

.....

C_INPUT_MESSAGE_INCOMING:
begin
< ---TU -- >
Owner.ReadBuffer(PacketInput_Message, FPacketLength); //1
if Assigned(Owner.FOnMessage) then
Synchronize(EventHandler);
 end;
</wiki>

Podejrzewam, że wraz ze zmianą w protokole, (1) się rozwala("zapycha")

0
Deti napisał(a)

Problem w tym, że nie mam Delphi, ani też specjalnie chęci instalowania go.

Proponuje postawić debugger i zrzucić do pliku dane wejściowe w następującym miejscu (HGG):

procedure TTCPResolver.Execute;

.....

C_INPUT_MESSAGE_INCOMING:
begin
< ---TU -- >
Owner.ReadBuffer(PacketInput_Message, FPacketLength); //1
if Assigned(Owner.FOnMessage) then
Synchronize(EventHandler);
 end;
</wiki>

Podejrzewam, że wraz ze zmianą w protokole, (1) się rozwala("zapycha")

z dalbys rade przepisac komponent dla delphi? bo to przesylanie obrazkow jest bardzo fajnym udogodnieniem :)

0

z dalbys rade przepisac komponent dla delphi? bo to przesylanie obrazkow jest bardzo fajnym udogodnieniem

Raczej nie (brak czasu i lenistwo). Ale Ty mógłbyś to zrobić., jeśli chcesz...

0

Hmm... Myślę że komponent najlepiej zna jego twórca, a osoba znająca komponent zrobi to dużo szybciej niż osoba nie znająca go...

Mimo wszystko duże grono osób prosi Cię o poprawienie THGG i myślę że nie potrzebne są tam bajery typu:

  • przesyłanie obrazków
  • avatary
  • czy inne małe udogodnienia.

Chodzi tylko o to - żeby status można było zmieniać (nawet bez opisów) i żeby wiadomości odbierał i wysyłał... formatowanie wiadomości też nie jest aż tak potrzebne...

1 użytkowników online, w tym zalogowanych: 0, gości: 1