szymonss Napisano Grudzień 28, 2009 Zgłoś Share Napisano Grudzień 28, 2009 Witam. Znalazłem kilka błędów w tym komponencie 1. Komponent nie odbiera długich wiadomości 2.Komponent źle odbiera zakolejkowane wiadomości. Np. z 10 wiadomości, które wysłałem, podczas nieobecności użytkownika, po zalogowaniu się na dany numer dochodzą tylko pierwsze 3... Pozdro. Link do komentarza Udostępnij na innych stronach More sharing options...
markovcd Napisano Grudzień 28, 2009 Autor Zgłoś Share Napisano Grudzień 28, 2009 Witam. Znalazłem kilka błędów w tym komponencie 1. Komponent nie odbiera długich wiadomości 2.Komponent źle odbiera zakolejkowane wiadomości. Np. z 10 wiadomości, które wysłałem, podczas nieobecności użytkownika, po zalogowaniu się na dany numer dochodzą tylko pierwsze 3... Pozdro. Już przedwczoraj zauważyłem i poprawiłem ten problem. Poczekaj na wersję 0.02. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Grudzień 29, 2009 Zgłoś Share Napisano Grudzień 29, 2009 Już przedwczoraj zauważyłem i poprawiłem ten problem. Poczekaj na wersję 0.02. A czy problem po importowaniu listy kontaktów oraz ponownym połączeniu ktory pokazałem w moim kodzie w katalogu EGG_PROBLEM - też będziesz w stanie naprawić w tej wersji 0.02? Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
markovcd Napisano Styczeń 22, 2010 Autor Zgłoś Share Napisano Styczeń 22, 2010 Nowa wersja już dostępna. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Styczeń 23, 2010 Zgłoś Share Napisano Styczeń 23, 2010 Dzięki za info. Z testów wynika, że teraz działa ok i eksport listy w starym formacie (text nie xml) z pliku już u mnie nie powoduje "wykrzaczenia się". Tylko dodam jedną uwagę, bo nowicjuesz mogą mieć problem. W Demie w unicie głównym jest przez słowem kluczowym unit jakiś trzech bajtów które powoduje, że jak się wczyta to w IDE to kompilator głupieje i pisze, że nie ma żadnych metod kiedy klika się na jakieś elementy - aby sprawdzić jaki kod się pod nimi kryje. Może popraw to. Widzę, że w wersji 0.3 będzie pewnie wsparcie dla grup. Ale moim zdaniem szkoda że nie mogleś zastosować jakiegoś zewnętrznego parsera XML na licencji która by pozwalała na jego użycie. Bo teraz jak ktoś dysponuje Delphi 7 Personal to sobie nie skompiluje tego komponentu, bo musiał by sobie "podkraść" te moduły z wersji Enterprise. Może rozważysz to czy udało by się Tobie parsować XML bez użycia wbudowanych komponentów. Wiem, że to łatwiejsze z ich użyciem, ale może będzie się Tobie chciało to przy użyciu jakiegoś parsera zrobić. Na sieci są dostępne jakieś, ale ciężko się ich używa a i nie są doskonałe ;/ Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
markovcd Napisano Styczeń 23, 2010 Autor Zgłoś Share Napisano Styczeń 23, 2010 W Demie w unicie głównym jest przez słowem kluczowym unit jakiś trzech bajtów które powoduje, że jak się wczyta to w IDE to kompilator głupieje i pisze, że nie ma żadnych metod kiedy klika się na jakieś elementy - aby sprawdzić jaki kod się pod nimi kryje. Ja tam nic takiego nie widzę, dziwne. Ok już poprawiam, odpaliłem w hex edytorze i faktycznie są tam te bajty. Nie wiem jak się to tam znalazło. Ale moim zdaniem szkoda że nie mogleś zastosować jakiegoś zewnętrznego parsera XML na licencji która by pozwalała na jego użycie. Możesz zaproponować jakiś dobry? Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Styczeń 23, 2010 Zgłoś Share Napisano Styczeń 23, 2010 Możesz zaproponować jakiś dobry? Nie wiem czy będzie dobry, nie korzystałem z niego, ale kiedyś zapytałem się bodajże Cubixmeistera z tego forum co darmowego polecił by mi do obsługi XMLa zamiast tych komponentów z Delphi 7 odpowiedział mi, że SpkXMLParser. Znaleźć go można na ów stronie: http://www.spook.freshsite.pl/download.php a konkretnie pod tym adresem: http://www.spook.freshsite.pl/files/downlo...pkxmlparser.zip Jak wspomniałem - nie bawiłem się nim za bardzo, ale myślę, że Tobie jako na tyle doświadczonemu programiście, który sobie poradził z obslugą Socketów, co na przykład dla mnie jest czarną magią, to pewnie i z tym XML, obsługiwanym przez inny komponent także sobie też poradzisz. Ewentualnie może ktoś jeszcze tutaj może polecić Tobie coś darmowego i dobrego do obsługi XMLa pod Delphi. Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
szymonss Napisano Styczeń 23, 2010 Zgłoś Share Napisano Styczeń 23, 2010 Bardzo sobię chwalę ten komponent Wspaniała robota! Czy w przyszłości komponent będzie wspierał wysyłanie i odbieranie obrazków? Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Styczeń 24, 2010 Zgłoś Share Napisano Styczeń 24, 2010 markovcd: siedziałem prawie pół dnia nad tym parserem i udało mi śię jedna mój program przerobić aby zapisywał i odczytywal dane z xmla, przy użyciu spkxmlparser zamiast tego, co standardowo jest w Delphi czyli TXMLDocument. Dlatego myślę że Ty jako bardziej mi się wydaje doświadczony pogramista również dasz rade. Swoją drogą jak pobieżnie na te generowane przez TEasyGG listy kontaktów spojrzałem to wydają mi śię nieco zamotane. Chociaż z tego co widzę, w module egg.pas TXMLDocument - jest użyty tylko dwa razy, w jednej procedurze i w jednej funkcji, ale dopasowanie kodu pozostawie Tobie, sam w sumie nie będę przerabiał kodu, bo autor zrobi to najlepiej. Poza tym nie bardzo wiem w jaki sposób w TXMLDocument stosuje się te AddChild. w tym parserze co Tobie poleciłem dodawać trzeba chyba kolejne tworzone TSpkXMLNode. A wyszukiwanie Nodeów robi się z tebo co pewnie zauważyłeś NodeByName[Nazwa, False]; Niestety parser nie obsługuje - z tego co mi się wydaję, Unikodu. No ale czy to go dyskwalifikuje czy jednak może też być? Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
markovcd Napisano Styczeń 24, 2010 Autor Zgłoś Share Napisano Styczeń 24, 2010 Czy w przyszłości komponent będzie wspierał wysyłanie i odbieranie obrazków? Tak, ale jeszcze nie tak szybko. Najpierw muszę zrobić obsługę grup oraz wygodniejszą funkcję formatowania wiadomości. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Styczeń 27, 2010 Zgłoś Share Napisano Styczeń 27, 2010 A ja znalazłem rozwiązanie na wykrzaczające się EasyGG przy imporcie z pliku lub serwera do ListView. Należy dodać z początku Application.ProcessMessagess i wtedy jest ok. Może to poprawisz lub jak to będzie nadal koniecznie dodasz o tym informację w dokumentacji. Przydało by się też przeanalizowanie dlaczego czasami po imporcie danych z serwera lub pliku nie odświeża Użytkowników. Pomaga wtedy z tego co testowałem jedynie reconnect. A i przydało by się według mnie - o ile to możliwe, zdarzenie w stylu OnUserStatusUpdateDone, które zachodzilo my wtedy jak komponent skończy zmieniać status, dla wszystkich kontaktów, bo jak zmian jest więcej niż jedna to przydało by się to w takim celu aby na przykład w OnUserStatus ukryć ListBox z userami, a w OnDone go ponownie pokazać na formie. //... function StateID(Status : TUserStatus) : Byte; begin case Status of usAvailable : Result := 0; // Dostępny usBusy : Result := 1; // Zaraz wracam usNotAvailable : Result := 2; // Niedostępny usInvisible : Result := 3; //Niewidoczny usBlocked : Result := 4; //Zablokowany else Result := 1; // Niedostępny end; end; // ... procedure TMainForm.EGGUserStatus(Sender : TObject; User : TUser); var I : Integer; begin Application.ProcessMessages; for I := 0 to ContactsLV.Items.Count - 1 do begin if ContactsLV.Items.Item[I].Data = User then begin ContactsLV.Items.Item[I].Caption := User.Name; ContactsLV.Items.Item[I].SubItems[1] := User.Description; ContactsLV.Items.Item[I].SubItems[2] := IntToStr(StateID(User.Status)); end; end; ContactsLV.AlphaSort; GGL.RefreshItems; end; Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
Davai Napisano Marzec 14, 2011 Zgłoś Share Napisano Marzec 14, 2011 Witam . markovcd w Twoim demku wyskakuje błąd gdy rozłączę internet a aplikacja jest zalogowana. Robię aplikacje na tym komponencie i zawsze ten sam problem: error 1 KODAsynchronous socket error 10053 error 2 KODWindows socket error: Istniejące połączenie zostało gwałtownie zamknięte przez zdalnego hosta (10054),on API 'send' jak usunąć te błędy by ich w ogóle nie pokazywało? Link do komentarza Udostępnij na innych stronach More sharing options...
robson1000 Napisano Czerwiec 8, 2011 Zgłoś Share Napisano Czerwiec 8, 2011 Davai Ja rozwiązałem to tak: Edytuj EGG.pas. Dodaj: TEasyGG =class(TEasyGGBase) private . . . procedure ErrorCatch(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); . . . end; implementation procedure TEasyGG.ErrorCatch(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if (ErrorCode = 10053) or (ErrorCode = 10054) then begin ErrorCode := 0; Status := usNotAvailable; Self.Active := False; end; end; W procedurze Create TEasyGG dodaj: Self.OnError := ErrorCatch; Link do komentarza Udostępnij na innych stronach More sharing options...
szymonss Napisano Czerwiec 15, 2011 Zgłoś Share Napisano Czerwiec 15, 2011 @robson1000 Ale dla 10049 ( Windows Socket Error: Żądany adres jest nieprawidłowy w tym kontekście (10049), on API 'Connect') Twój sposób już nie działa. Błąd pojawia się podczas gdy próbuje się zalogować gdy mam wyłączony internet. Dodałem oczywiście odpowiedniego if'a. Może ktoś by miał jakiś pomysł? Pozdrawiam. Link do komentarza Udostępnij na innych stronach More sharing options...
robson1000 Napisano Czerwiec 17, 2011 Zgłoś Share Napisano Czerwiec 17, 2011 Można też zrobić tak: procedure TEasyGG.ErrorCatch(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ErrorCode := 0; Status := usNotAvailable; Self.Active := False; end; To powinno przechwycić wszystkie błędy. Link do komentarza Udostępnij na innych stronach More sharing options...
szymonss Napisano Czerwiec 17, 2011 Zgłoś Share Napisano Czerwiec 17, 2011 Właśnie też tak później zrobiłem, ale też nie działa. Błędy podczas utraty połączenia wykrywa, ale tego jednego nie chce. Pozdrawiam. Link do komentarza Udostępnij na innych stronach More sharing options...
robson1000 Napisano Czerwiec 17, 2011 Zgłoś Share Napisano Czerwiec 17, 2011 Błąd wywoływany przy próbie zalogowania, przy braku połączenia internetowego, to inna sprawa. Komponent przed zalogowaniem metodą HTTP GET pobiera host i port z którym następnie się łączy. Błąd jest generowany w funkcji HttpGetText i nie można go przechwycić procedurą którą podałem. Moje rozwiązanie wygląda tak: Edytuj plik EGGFuncts.pas. Funkcję HttpGetText sprowadź do takiej postaci: function HttpGetText(URL: string): string; var FClientSocket: TClientSocket; SockStream: TWinSocketStream; Host, Request: String; Buffer: array[0..254] of Char; const DATA = 'GET %s HTTP/1.1' + rn + 'Connection: Keep-Alive' + rn + 'Host: %s' + rn + rn; begin FillChar(Buffer, SizeOf(Buffer), #0); if Copy(URL, 1, 7) = 'http://' then URL := Copy(URL, 8, Length(URL)); Host := Copy(URL, 1, Pos('/', URL) - 1); Request := Copy(URL, Pos('/', URL), Length(URL)); Request := Format(DATA, [Request, Host]); FClientSocket := TClientSocket.Create(nil); FClientSocket.Host := Host; FClientSocket.Port := 80; FClientSocket.ClientType := ctBlocking; SockStream := nil; try FClientSocket.Active := True; // uzyskanie polaczenia SockStream := TWinSocketStream.Create(FClientSocket.Socket, 60000); // utworzenie streamu SockStream.Write(Request[1], Length(Request)); SockStream.Read(Buffer, SizeOf(Buffer)); Result := Buffer; Result := Trim(Copy(Result, Pos(rn + rn, Result), Length(Result))); FClientSocket.Active := False; except FClientSocket.Active := False; Result := ''; end; if SockStream <> nil then SockStream.Free; FClientSocket.Free; end; Poniżej w procedurze GetHost dodaj na samym początku: APort := 0; Następnie przejdź do pliku EGG.pas i edytuj procedurę TEasyGG.Connect do takiej postaci: KOD procedure TEasyGG.Connect; var sHost: String; iPort: Integer; begin if FAutoHost and (not Active) then begin GetHost(UID, sHost, iPort); // automatyczne pobranie adresu serwera Host := sHost; Port := iPort; end; if (Host = '') or (Port = 0) then begin Status := usNotAvailable; if Assigned(OnDisconnect) then OnDisconnect(Self, Socket); end else inherited; end; UWAGA! Jeśli uruchomimy program w Delphi, to błąd i tak zostanie przechwycony i pokazany, jeśli jednak uruchomimy program z pliku exe to błąd się nie pokaże. Link do komentarza Udostępnij na innych stronach More sharing options...
szymonss Napisano Czerwiec 18, 2011 Zgłoś Share Napisano Czerwiec 18, 2011 hehe, wielkie dzięki działa jak należy. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Czerwiec 18, 2011 Zgłoś Share Napisano Czerwiec 18, 2011 Ja nie mam zbyt dużej wiedzy na temat "gołych" socketów - pewnie jak napisano w odpowiedzi podany sposób działa, ale można zrobić też prościej i również zadziała, oczywiście przy odpaleniu exeka z poza IDE. Modyfikujemy eggfuncts.pas tak jak pokazałem poniżej. Czyli najprostsze jakie może być przechwycenie wyjątku. procedure GetHost(const AUID : Integer; var AHost : string; var APort : Integer); var s : string; i, j : Integer; const URL = 'http://appmsg.gadu-gadu.pl/appsvc/appmsg_ver8.asp?fmnumber=%d&lastmsg=0&version=%s'; begin try // fix s := HttpGetText(Format(URL, [AUID, GG_VERSION])); i := LastDelimiter(' ', s); AHost := Trim(Copy(s, i + 1, Length(s))); j := LastDelimiter(':', s); if j <> 0 then APort := StrToInt(Copy(s, j + 1, i - j - 1)); except end; end; Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
robson1000 Napisano Czerwiec 18, 2011 Zgłoś Share Napisano Czerwiec 18, 2011 Można i tak Olesio. Wszystko dlatego, że najpierw rozwiązywałem problem z logowaniem się przy braku połączenia, a później problem z zerwaniem połączenia. Ale nie ważne. Pozdrawiam. Link do komentarza Udostępnij na innych stronach More sharing options...
Darek2Wymia Napisano Lipiec 4, 2011 Zgłoś Share Napisano Lipiec 4, 2011 Świetny, czegoś takiego szukałem. Link do komentarza Udostępnij na innych stronach More sharing options...
szymonss Napisano Lipiec 5, 2011 Zgłoś Share Napisano Lipiec 5, 2011 Tak, komponent świetny, tylko szkoda, że nie jest już rozwijany. Może ktoś go jakoś zmodyfikował np. nie wiem, rozwiązał problem z listą kontaktów powyżej 160, poprawił jakieś inne błędy lub dodał jakieś bajery typu wysyłanie i odbieranie obrazków itp? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.