in Delphi,,,,,, de verouderde overeenkomst ernstig werk msn messenger, snel zal worden bijgewerkt,,,,, dat is Delphi msn messenger in de overeenkomst niet volledig, voor de bouw van het pakket moet wsocket, het is een deel van de normen (nog niet genoeg een gestroomlijnde msn messenger klonen).Je ziet hier al het werk (de meeste is vanwege m 'n stopcontact is de nieuwe), van dit artikel is gebaseerd op artikel venkydude msn werkt en de oude versie van kmerlin (een open - source msn messenger klonen Linux).Dit is de tweede ik geschreven heb instant messaging (de eerste overeenkomst over Yahoo, iets wat ik niet helemaal kunnen vanwege de beperkte tijd (veel) ben ik van plan zo spoedig mogelijk in de actualisering van het artikel, < --------------------------------- code -------------------- --------------- 50 op 50 >,,,,, - de TODO: de uitvoering van plaatselijke doen, schoonmaken, de verlenging van},,,,,,,,,,, - het msn messenger;,, wsocket, het gebruik van md5, klasse, SysUtils;,,,,,,,, en onze online tuserstate = (,,, /je online is,,,,,, /ons bezig te houden, echt heel druk.,,,,, usbrb, /terug,,,,,, usaway. ///////usonphone,,,,,,,,,,.,, uslunch, /lunch,,,,,, ushidden. ///////usoffline verborgen,,,,//Offline,,,,,,,,,, TMSNMessenger =), klasse, (TComponent), particuliere,,,,,,, FConnected: booleaanse; FUserName:, touw, touw, FPassword:;,,,,,,,,, FFriendlyUserName:, touw, FLog: TStrings;,,,, FState: FFriendlyNameChange: TNotifyEvent; TUserState;,,, functie, GetHost:, touw,,,.,,, SetHost (totaal, waarde, touw,);,,, functie, GetPort:, touw,,,.,,, SetPort (totaal, waarde, touw,);,,,.,, SetUserName (totaal, waarde, touw,);,,,., SetPassWord (totaal, waarde, touw,);,,, functie, GetFriendlyUserName:, touw,,,.,,, SetFriendlyUserName (totaal, waarde, touw,);,,,., SetState (totaal, waarde, TUserState); en,, -Van fsocket:twsocket;,,,,, ftrialid: gehele getal;,,,,,,, sendver; programma 's, de procedures, de receivesyn;,,,, de procedures, de socketwrite (totaal: touw, touw,,,,,,); programma' s, logwrite (en een string, gegevens, procedures en,); processcommand (totaal string commando:,,,,,,,); programma 's, socketdisconnect (afzender: TObject; fout: de woorden);,,, de procedures, de socketdataavailable (afzender: TObject; fout: de woorden);,,, de procedures, De SocketConnect (afzender: TObject; fout: de woorden);,,,, het programma triggerfriendlynamechange dynamische;,,,,,,,,, de fabrikant, de oprichting van (aowner:tcomponent);,,,,, herschrijven, de verschrikkelijke, vernietigen;,,,,,,,,, - procedures, programma geannuleerd;,,,,,, - string eigenschappen gepubliceerd,,,Lezen, schrijven, sethost gethost;,,,, onroerend goed, havens, serie lezen, schrijven, setport getPort;,,,,, een gebruikersnaam: eigendom, lezen, schrijven, fusername, setusername;,,, eigendom, wachtwoord:, lees het touw, fpassword, schrijven, setpassword;,,, eigendom, friendlyusername, serie: lezen, schrijven, getfriendlyusername, setfriendlyusername;,,, attributen, verband: Bull, lezen, fconnected;,,, eigendom, log: tstrings, lezen, schrijven, geslagen, gegeseld, eigendom, friendlynamechange;,,, met andere woorden: lezen, schrijven, ffriendlynamechange, ffriendlynamechange;,,, eigendom, de huidige situatie: tuserstate, lezen, schrijven, fstate setstate;,,,,,,,,,, dat de ramen;,,,,,,, staat: totaal aantal groepen [tuserstate], touw, = d - in'chg (,,,,,'chg% d BSY',,'CHG %d BRB',,'CHG %d AWY',,'CHG %d PHN',,'CHG %d LUN',,,, ,'CHG %d HDN',,'CHG %d FLN' ,);,,,type,, ,CharSet = ,Set of ,char;,,,function ,UTF8ToAnsi(x: ,string,): ansistring;,, ,,{ Function that recieves UTF8 string and converts,, to ansi string },,,,var,, ,i: integer;,, b1, b2: byte;,,begin,, ,Result := x;,, i := ,1,;,, ,while ,i <= Length(Result) ,do begin,, if ,(ord(Result[i]) ,and ,,$80,) <> ,0 ,,then begin,, ,b1 := ord(Result[i]);,, b2 := ord(Result[i + ,1,]);,, ,if ,(b1 ,and ,,$F0,) <> ,$C0 ,,then,, ,Result[i] := ,#128,, ,,else begin,, ,Result[i] := Chr((b1 ,shl ,,6,) ,or ,(b2 ,and ,,$3F,));,, Delete(Result, i + ,1,,1,);,, ,end,;,, ,end,;,, inc(i);,, ,end,;,,end,;,,,function ,AnsiToUtf8(x: ansistring): ,string,;,, ,,{ Function that recieves ansi string and converts,, to UTF8 string },,,,var,, ,i: integer;,, b1, b2: byte;,,begin,, ,Result := x;,, ,for ,i := Length(Result) ,downto ,,1 ,,do,, if ,Result[i] >= ,#127 ,,then begin,, ,b1 := ,$C0 ,,or ,(ord(Result[i]) ,shr ,,6,);,, b2 := ,$80 ,,or ,(ord(Result[i]) ,and ,,$3F,);,, Result[i] := chr(b1);,, Insert(chr(b2), Result, i + ,1,);,, ,end,;,,end,;,,,Function ,ExtractWord(N:Integer;S:,String,;WordDelims:CharSet):,String,;,,Var,, ,I,J:Word;,, Count:Integer;,, SLen:Integer;,,Begin,, ,Count := ,0,;,, I := ,1,;,, Result := ,'',;,, SLen := Length(S);,, ,While ,I <= SLen ,Do Begin,, ,,,{preskoc oddelovace},, ,,,While ,(I <= SLen) ,And ,(S[I] ,In ,WordDelims) ,Do ,Inc(I);,, ,,{neni-li na konci retezce, bude nalezen zacatek slova},, ,,,If ,I <= SLen ,Then ,Inc(Count);,, J := I;,, ,,{a zde je konec slova},, ,,,While ,(J <= SLen) ,And Not,(S[J] ,In ,WordDelims) ,Do ,Inc(J);,, ,,{je-li toto n-te slovo, vloz ho na vystup},, ,,,If ,Count = N ,Then Begin,, ,Result := Copy(S,I,J-I);,, Exit,, ,End,;,, I := J;,, ,End,; ,,{while},,,,End,;,,,,function ,WordAt(,const ,Text : ,string,; Position : Integer) : ,string,;,,begin,, ,Result := ExtractWord(Position, Text, [,' ',]);,,end,;,,,,{ TMSNMessenger },,,,,constructor ,TMSNMessenger.Create (AOwner: TComponent);,,, Inherited beginnen,, het AOwner);,, FSocket: = TWSocket.Create (zelf);,, FSocket.Addr: =,'messenger.hotmail.com';,,, FSocket.Port: =,'1863', FSocket.Proto:='tcp';,,,,,,,,,, FSocket.OnSessionConnected: = SocketConnect FSocket.OnSessionClosed;: = SocketDisconnect;,, FSocket.OnDataAvailable: = SocketDataAvailable;,, FConnected: = valse;,,,,,,,,,, ik TMSNMessenger.Destroy; destructor,,,,,, FSocket.Free; FSocket: = nul;,,,,,,, aan het einde van Inherited, vernietigen;,,,,,,, (TMSNMessenger.GetFriendlyUserName:, touw,,,,, ", de" of ", FConnected dan, het einde: = FFriendlyUserName;,,,,,,, functie, TMSNMessenger.GetHost:, touw, ik,,,,,, result := FSocket.Addr;,,end,;,,,function ,TMSNMessenger.GetPort: ,String,;,,begin,, ,Result := FSocket.Port;,,end,;,,,procedure ,TMSNMessenger.Login;,,begin,, ,FSocket.Connect;,,end,;,,,procedure ,TMSNMessenger.Logoff;,,begin,, end,;,,,procedure ,TMSNMessenger.LogWrite(,const ,Data: ,String,);,,begin,, if ,Assigned( FLog ) ,then,, ,FLog.Add(Data);,,end,;,,,,{Processcommand here is akin to a windowproc,, here we process all kind of info sent from the server,, as of now it is IFFull (full of if's) perhaps if i have,, some spare time will turn this into a case,,, TODO: Clean this procedure mess up,, TODO: Add more commands},,,,,procedure ,TMSNMessenger.ProcessCommand;,,var,, ,Tmp: ,String,;,, Hash: ,String,;,,begin,, ,Tmp := WordAt(ACommand,1,);,,, ,if ,Tmp = ,'VER' ,,then,, ,SocketWrite(,'INF %d',);,,, ,if ,Tmp = ,'INF' ,,then,, ,SocketWrite(,'USR %d MD5 I ',+ FUserName);,,, ,if ,Tmp = ,'USR' ,,then,, begin,, if ,WordAt(ACommand,4,) = ,'S' ,,then,, begin,, ,Hash := WordAt(ACommand,5,);,, Delete(Hash, pos(,#13#10,, Hash), Length(Hash));,, Hash := StrMD5(Hash + PassWord);,, SocketWrite(,'USR %d MD5 S ' ,+ Lowercase(Hash));,, ,end else,, begin,, ,FFriendlyUserName := WordAt(ACommand,5,);,, SocketWrite(,'SYN %d 1',);,, ReceiveSYN;,, ,end,;,, ,end,;,,,{When you receive an XFR and you are not connected,, to the msn server it means redirect to another server},, ,,,if ,(TMP = ,'XFR',) ,and not ,Connected ,then,, begin,, ,TMP := WordAt(ACommand,4,);,, FSocket.Close;,, Delete(Tmp, pos(,':',, Tmp), Length(Tmp));,, FSocket.Addr := Tmp;,, TMP := WordAt(ACommand,4,);,, Delete(Tmp,1,, pos(,':',, Tmp));,, FSocket.Port := Tmp;,, FSocket.Connect;,, Exit;,, ,end,;,,,{Rename Friendly name},, ,,,if ,(TMP = ,'REA',) ,then,, begin,, ,FFriendlyUserName := WordAt(ACommand,5,);,, FFriendlyUserName := StringReplace(FFriendlyUserName,' ',,' ',, [rfReplaceall]);,, TriggerFriendlyNameChange;,, ,end,;,,,{The out command is received before the server,, disconnects us, if it's because we've logged in another machine,, we receive the message OUT OTH (OTHER MACHINE),, TODO write sEen gebeurtenis of een herstel van deze mededeling),,,,,, als (tmp =, uit ") en het begin van producentenorganisaties (,, als'oth", beschikking van 1) >,,,,,,,'logged logwrite (in een andere computer uitschakelen,,,,,);,,,,,,,,,, {SYN is ongetwijfeld een van de meest informationfull msn messenger commando, SYN vertelt ons:, e - mail, beschikbaar, vrienden - lijst, lijst, blokken, omgekeerde (mensen, je op hun lijst), telefoonnummer (thuis, telefoon, enz.), msn messenger. Een,,,,, maar dit is een prijs hebben, omdat er zo veel informatie, alle informatie wsocket krijgt misschien niet de juiste (kwaliteit niet blokkeren, dus kom), om het te krijgen, zullen we de draad met 5 seconden, (d.w.z. your forms will not receive any message and,, seem unresponsive for a while), I,, know there must be a better way around if somebody knows email me.,,, TODO : Parse the received content,, TODO : look for a way wich does not have to freeze the thread,, },,,,,procedure ,TMSNMessenger.ReceiveSYN;,,var,, ,Tmp: ,String,;,,begin,, ,FSocket.OnDataAvailable := ,nil,;,,, Sleep(,5000,);,, Tmp := FSocket.ReceiveStr;,,, FSocket.OnDataAvailable := SocketDataAvailable;,, Tmp := UTF8ToAnsi(Tmp);,, LogWrite(,'RECV : ' ,+ Tmp);,, SocketWrite(,'CHG %d NLN',);,,end,;,,,procedure ,TMSNMessenger.SendVER;,,begin,, ,SocketWrite(,'VER %d CVR0 MSNP5 MSNP6 MSNP7',),,end,;,,,procedure ,TMSNMessenger.SetFriendlyUserName(,const ,Value: ,String,);,,var,, ,tmp: ,String,;,,begin,, if ,FConnected ,and ,(FUserName <> Value) ,then,, begin,, ,tmp := StringReplace(Value,' ',,' ',, [rfReplaceAll]);,, tmp := AnsiToUtf8(Tmp);,, SocketWrite(,'REA %d ' ,+ FUsername + ,' ',+ tmp);,, ,end,;,,end,;,,,procedure ,TMSNMessenger.SetHost(,const ,Value: ,String,);,,begin,, if not ,Connected ,then,, if ,FSocket.Addr <> Value ,then,, ,FSocket.Addr := Value;,,end,;,,,procedure ,TMSNMessenger.SetPassWord(,const ,Value: ,String,);,,begin,, if not ,Connected ,then,, if ,(FPassword <> Value) ,then,, ,FPassword := Value;,,end,;,,,procedure ,TMSNMessenger.SetPort(,const ,Value: ,String,);,,begin,, if not ,Connected ,then,, if ,FSocket.Port <> Value ,then,, ,FSocket.Port := Value;,,end,;,,,procedure ,TMSNMessenger.SetState(,const ,Value: TUserState);,,begin,, if ,FConnected ,then,, if ,(FState <> Value) ,then,, ,SocketWrite( RealState[Value] );,,end,;,,,procedure ,TMSNMessenger.SetUserName(,const ,Value: ,String,);,,begin,, if not ,FConnected ,then,, if ,FUsername <> Value ,then,, ,FUserName := Value;,,end,;,,,procedure ,TMSNMessenger.SocketConnect(Sender: TObject; Error: Word);,,begin,, ,FTrialID := ,1,;,, SendVER;,,end,;,,,procedure ,TMSNMessenger.SocketDataAvailable(Sender: TObject; Error: Word);,,var,, ,Tmp: ,String,;,,begin,, ,Tmp := FSocket.ReceiveStr;,, Tmp := UTF8ToAnsi(Tmp);,, LogWrite(,'RECV : ' ,+ Tmp);,, PRocessCommand (Tmp);,,,,,,,,., TMSNMessenger.SocketDisconnect (Sender: TObject; fout woord);,,, ",, FConnected: = niet LogWrite ('Disconnected';,,,,,,,,,,,,,., TMSNMessenger.SocketWrite (totaal, AString:, touw,)",,,,,, FSocket.SendStr (formaat (AString, [FTrialID]) +, #13, +, #10,); LogWrite (,,,'SENT: "+ formaat (AString, [FTrialID]);,, Inc. (FTrialID);,,,,,,,,.,,, TMSNMessenger.TriggerFriendlyNameChange; de eerste,, als, 1 (FFriendlyNameChange),...,,, FFriendlyNameChange (zelf);,, aan het einde van het einde,,,,,.,, < ---------------------------------/CODE---------------------------------------> a sample zou AMSN:: = TMSNMessenger.Create (zelf); ///////AMSN is een variabele van het type TMSNMessenger AMSN.UserName: = "" dat zou moeten vormen; ///////gebruikersnaam, amsn.password:= * * * * * * * * @ hotmail.com; ///////amsn dat wachtwoord. In het logboek: = memo1.; ///////logboek aangegeven bestemming van het ontvangen en doorgeven van informatie, ik gebruik het om te zoeken naar overeenkomsten informatie of zoiets, maar niet noodzakelijkerwijs met het teken om amsn.; ///////- programma, dat we moeten beginnen met de log - proces,
Msn messenger in Delphi, hoe
Next Page:Alpha te mengen, bitmap