В MSN Messenger в делфи


<р>как работать с MSN мессенджера протоколом в Delphi
и<р><размер шрифта="5">эта статья серьезно устарела и будет обновлена в ближайшее время

<п />и

Это реализация посыльный MSN протокола в Delphi это не полный и для того, чтобы ее построить вам понадобятся WSocket пакет, то большинство из того, что представлено здесь, является частью Спецификация (еще не хватало, чтобы даже урезанный клон МСН мессенджер). Работы, которые вы видите здесь, имеет свои задачи (большинство из-за того, что я просто новичок в программировании сокетов), данная статья основана на работах статьи venkydude MSN и старой версии KMerlin (с открытым исходным кодом MSN мессенджера клон для Linux). В этой статье я пишу о обмен мгновенными сообщениями (первый о Yahoo протоколу, который я не смог завершить из-за нехватки времени (много работы)) я планирую обновлять эту статью, как только возможное <р>< & & & & & & & & & & & & & & & & -код & & & & & & & & & & & & & & & & & & & & >

<код><шрифта лицо="курьер Нью" Размер="3"><цвет шрифта="#число 0000ff"><я>{глобальный задач: ввести локальные задачи, очистки, продления}
Виустройство в MSNMessenger
<б>интерфейс
использование функции
WSocket, алгоритм MD5, классы, Модуля приведет к
<б>Тип
и TUserState = (
В usOnline, <цвет шрифта="#число 0000ff"><я>// Вы не Интернет
usBusy, <цвет шрифта="#число 0000ff"><я>// на самом деле занят и
usBRB, <цвет шрифта="#число 0000ff"><я>// вернусь и
usAway, <цвет шрифта="#число 0000ff"><я>// выезде в
usOnPhone, <цвет шрифта="#число 0000ff"><я>//о
телефон usLunch, <цвет шрифта="#число 0000ff"><я>//обед с
usHidden, <цвет шрифта="#число 0000ff"><я>//скрытой и
usOffline <цвет шрифта="#число 0000ff"><я>//автономных и
)
В TMSNMessenger = <Б>класс(TComponent)
<б>Частная
и FConnected: логическое
В FUserName: <б>строка
FPassword: <б>строка
FFriendlyUserName: <б>строка
пороть: TStrings
В FFriendlyNameChange: TNotifyEvent
В FState: TUserState
<б>функции в GetHost: <б>строка
<б>процедура на SetHost(<б>константный значение: <б>строка в)
<б>функции , и GetPort: и строка
<б>процедура
на SetPort(<б>константный значение: <б>строка в)
<б>процедура SetUserName(<б>константный значение: <б>строка в)
<б>процедура , и задание пароля(<б>константный значение: и строка в)
<б>функции в GetFriendlyUserName: <б>строка
<б>процедура на SetFriendlyUserName(<б>константный значение: <б>строка в)
<б>процедура : при выполнении функция setstate(<б>константный значение: TUserState)
<б>защищенные и
FSocket: TWSocket
В FTrialID: число
<б>процедура в SendVER
<б>процедура на ReceiveSYN
<б>процедура на SocketWrite(<б>константный строка: <б>строка)
<б>процедура , и как logwrite(<б>константный данные: <б>строка в)
<б>процедура на ProcessCommand(<б>константный команда: <б>строка в)
<б>процедура в SocketDisconnect(Отправитель: TObject ошибка: слово)
<б>процедура в SocketDataAvailable(Отправитель: TObject ошибка: слово)
<б>процедура на SocketConnect(Отправитель: TObject ошибка: слово)
<б>процедура на TriggerFriendlyNameChange <б>динамичность
<б>общие
конструктор создать(AOwner: TComponent) <б>переопределить
<б>деструктор уничтожить <б>переопределить
<б>процедура логин
<б>процедура на выходе
<б>опубликовано на
свойства на хост: <б>строка GetHost <б>пишут SetHost
<б>недвижимость в Порт <б>строка , и GetPort <б>пишут SetPort
<б>собственность Имя пользователя: <б>строка FUserName <б>пишут SetUserName
<б>собственность пароль: <б>строка FPassword <б>пишут , и задание пароля
<б>собственность FriendlyUserName: <б>строка GetFriendlyUserName <б>пишут SetFriendlyUserName
<б>недвижимость в связи: логическое и ознакомиться на FConnected
<б>недвижимость в лог: TStrings и ознакомиться , и пороть <б>пишут выпороть
<б>собственность FriendlyNameChange: TNotifyEvent и ознакомиться на FFriendlyNameChange <б>пишут FFriendlyNameChange
<б>собственность Статус: TUserState и ознакомиться в FState <б>пишут : при выполнении функция setstate
<б>конец
<б>реализация
использование окна
<б>константный RealState: <б>массив[TUserState] <б>строки =
и (<цвет шрифта="#800000">'ЧГ %д НЛН', <цвет шрифта="#800000">'ЧГ %д школа бум', <цвет шрифта="#800000">'ЧГ %д БРБ', <цвет шрифта="#800000">'ЧГ %д авиалиниях', <цвет шрифта="#800000">'ЧГ %д ПТС', <цвет шрифта="#800000">'ЧГ %д лунь,
<цвет шрифта="#800000">'ЧГ %д СЗР', <цвет шрифта="#800000">'ЧГ %д НФО' )
<б>Тип
и Кодировка = В наборе чар
<б>функции
в UTF8ToAnsi(х: <б>строка): ansistring
<цвет шрифта="#число 0000ff"><я>{ функция, которая получает в UTF8 строку и преобразует в
В ANSI строку }в
<б>вар
В мне: целое число
В В1, В2: байт
<б>начинается
результат := х
я := <цвет шрифта="#800080">1
<Б>А мне <= Длина(результат) <б>начинаются
если (орд(результат[я]) и <цвет шрифта="#800080">$80) <> <цвет шрифта="#800080">0 <б>потом начинается
Б1 := ОГА(результат[я])
В Б2 := ОГА(результат[я <цвет шрифта="#800080">1])
при (В1 и <цвет шрифта="#800080">$Ф0) <> <цвет шрифта="#800080">$Ц0 <б>то есть
результат[я] := <цвет шрифта="#800000">#128
В <б>еще начинается
результат[я] := ЧР((В1 <б>ЗЫ <цвет шрифта="#800080">6) или (В2 и <цвет шрифта="#800080">$3ф))
и удалить(результат, я <цвет шрифта="#800080">1, <цвет шрифта="#800080">1)
<б>конец
<б>конец
Инк(я)
<б>конец
<б>конец
<б>функции
в AnsiToUtf8(х: ansistring): и строка
<цвет шрифта="#число 0000ff"><я>{ функция, которая принимает строку и преобразует в ANSI
для строк UTF8 }в
<б>вар
В
мне: целое число
В В1, В2: байт
<б>начинается
результат := х
для мне := Длина(результат) <б>до <цвет шрифта="#800080">1 <б>делать
если
в результате[я] >= <цвет шрифта="#800000">#127 <б>затем начинается
Б1 := <цвет шрифта="#800080">$Ц0 или (орд(результат[я]) <б>ГТК <цвет шрифта="#800080">6)
В Б2 := <цвет шрифта="#800080">$80 или (ОГА(результат[я]) и <цвет шрифта="#800080">$3ф)
В результате[я] := ЧР(В1)
и вставить(ЧР(В2), результат, я <цвет шрифта="#800080">1)
<б>конец
<б>конец
<б>функции
, и ExtractWord(Н:целое число S: истрока WordDelims:Кодировка): истрока
<б>Вар
В
мне,Дж:слова
В подсчет:число
и Слен:Целое число
<б>начинается
граф := <цвет шрифта="#800080">0
я := <цвет шрифта="#800080">1
В результате := <цвет шрифта="#800000">"
и Слен := Длина(с)
<Б>А
мне <= Слен <б>делать начинается
<цвет шрифта="#число 0000ff"><я>{preskoc oddelovace}
В <Б>А (Я <= Слен) <б>и
(С[Я] В WordDelims) <б>делать Инк(я) в
<цвет шрифта="#число 0000ff"><я>{нени-ли на konci retezce, буде nalezen zacatek слова}
В при мне <= Слен и тогда Инк(счет)
и Х := У меня есть
<цвет шрифта="#число 0000ff"><я>{а зде йе конец слова}
В <Б>А (К <= Слен) и не(s[Дж] В на WordDelims) и у Инк(Дж)
<цвет шрифта="#число 0000ff"><я>{йе-ли Тото н-т е слово, vloz хо на выступ}
В при Кол-во = Н <Б>затем начинается
результат := экземпляр(ы,я,Ю-Я)
на выходе
<б>конец
я := Дж
<б>конец <цвет шрифта="#число 0000ff"><я>{А} и
в конце

<б>функции
на WordAt(<б>константный
текст : и строка на установки : целое число) : текст строка
<б>начинается
результат := ExtractWord(положение, текст, [<цвет шрифта="#800000">' '])
<б>конец
<цвет шрифта="#число 0000ff"><я>{ TMSNMessenger }в
<б>конструктор TMSNMessenger.Создать(AOwner: TComponent)
<б>начинается
наследство создать(AOwner)
В FSocket := TWSocket.Создать(Самовыдвижение)
В FSocket.Значение addr := <цвет шрифта="#800000">'messenger.hotmail.com'
В FSocket.Порт := <цвет шрифта="#800000">'1863'
В FSocket.Прото:= <цвет шрифта="#800000">'ПТС'
В FSocket.OnSessionConnected := SocketConnect
В FSocket.OnSessionClosed := SocketDisconnect
В FSocket.OnDataAvailable := SocketDataAvailable
В FConnected := ложь
<б>конец
<б>деструктор TMSNMessenger.Уничтожить
<б>начинается
FSocket.Бесплатные
FSocket := <б>Нил
<б>наследство уничтожить
<б>конец

<б>функции
в TMSNMessenger.GetFriendlyUserName: <б>строка
<б>начать
если не FConnected <б>то есть
результат := FFriendlyUserName
<б>конец
<б>функции
в TMSNMessenger.GetHost: <б>строка
<б>начинается
результат := FSocket.АДР
<б>конец
<б>функции TMSNMessenger.GetPort: <б>строка
<б>начинается
результат := FSocket.Порт
<б>конец
<б>процедура TMSNMessenger.Логин
<б>начинается
FSocket.Подключения
<б>конец
<б>процедура TMSNMessenger.Выход
<б>начинается
конец
<б>процедура
в TMSNMessenger.Как logwrite(<б>константный данные: <б>строка
в)
<б>начать
если
, и назначена( пороть ) <б>то есть
выпороть.Добавить(данные)
<б>конец
<цвет шрифта="#число 0000ff"><я>{Processcommand здесь сродни процедуре windowproc
как мы обрабатываем все виды информации, переданных с сервера
как сейчас это IFFull (полный ли это) возможно, если бы я
есть немного свободного времени станет в этом случае
В ТОДО: Очистить этот порядок испортить и
todo: добавьте больше команд}
Випроцедура в TMSNMessenger.ProcessCommand
<б>вар
Тмп: <б>строка
хэш: <б>строка
<б>начинается
Тмп := WordAt(команда, <цвет шрифта="#800080">1) в
при Тмп = <цвет шрифта="#800000">'Сильвер' <б>то есть
SocketWrite(<цвет шрифта="#800000">'инф %д') и
при Тмп = <цвет шрифта="#800000">'инф' /шрифт><б>то есть
SocketWrite(<цвет шрифта="#800000">'УСР %д с MD5 я ' FUserName)
при Тмп = <цвет шрифта="#800000">'ЕГР' , и тогда
и начинается
если WordAt(команда, <цвет шрифта="#800080">4) = <цвет шрифта="#800000"> " с " , и тогда
и начинается
хэш := WordAt(команда, <цвет шрифта="#800080">5)
и удалить(хэш, пос(<цвет шрифта="#800000">#13#10, Хэш), длины(хэш))
хэш := StrMD5(хэш пароля)
В SocketWrite(<цвет шрифта="#800000">'УСР %д MD5 В С' строчные(хэш))
<б>конец еще
и начинается
FFriendlyUserName := WordAt(команда, <цвет шрифта="#800080">5)
В SocketWrite(<цвет шрифта="#800000">'Син %д 1')
В ReceiveSYN
<б>конец
<б>конец
<цвет шрифта="#число 0000ff"><я>{когда появляется xfr, и Вы не подключены
к MSN сервера это означает перенаправление на другой сервер}в
при (ТМП = <цвет шрифта="#800000">'деятельность компании xfr') и не подключено <б>затем
и начинается
ТМП := WordAt(команда, <цвет шрифта="#800080">4)
В FSocket.Рядом с
удалить(ТСП, пос(<цвет шрифта="#800000">':', Тмп), Длина(Тмп))
В FSocket.Адрес := Тмп
В ТМП := WordAt(команда, <цвет шрифта="#800080">4)
и удалить(Тмп <цвет шрифта="#800080">1, пос.(<цвет шрифта="#800000">':', Тмп))
В FSocket.Порт := Тмп
В FSocket.Подключения
на выходе
<б>конец
<цвет шрифта="#число 0000ff"><я>{переименовать имя} и
при (ТМП = <цвет шрифта="#800000">'РЭА') и тут
и начинается
FFriendlyUserName := WordAt(команда, <цвет шрифта="#800080">5)
В FFriendlyUserName := StringReplace(FFriendlyUserName, <цвет шрифта="#800000">' ', <цвет шрифта="#800000">' ', [rfReplaceall])
В TriggerFriendlyNameChange
<б>конец
<цвет шрифта="#число 0000ff"><я>{из команды до сервера
что разъединяет нас, если это потому, что мы вошли в другую машину
мы получили сообщение из другой (другая машина)
как сделать запись какого-либо события или что-то для получения этого уведомления}в
при (ТМП = <цвет шрифта="#800000">выход) и тут
и начинается
если
в пос(<цвет шрифта="#800000">'дру', команда) > <цвет шрифта="#800080">1 <б>то есть
как logwrite(<цвет шрифта="#800000">'войти в другой компьютер отключение')
<б>конец
<б>конец
<цвет шрифта="#число 0000ff"><я>{Син-это, без сомнения, самый информацияполный посыльный MSN команду
и Син сообщает нам:
В наличии по электронной почте
и друг
списка черный список
в обратный список (люди, которые вас в свои списки)
все номера телефонов (Домашний, мобильный и т. д.)
В MSN мессенджера параметры
и т. д.
однако, это приходит с ценой, поскольку существует так много информации
WSocket не может получить все данные правильно (качество не блокирующих сокетов)
таким образом для того чтобы сделать это мы будем мерзнуть этой теме в течение 5 секунд
вы(то есть ваши формы не будет получать никаких Сообщений
и, кажется, не отвечает на некоторое время), я
вы знаете, там должен быть лучший способ, если кто-то знает, напишите мне.
и сделать анализ полученных данных.
на будущее : найти способ, который не придется мерзнуть нить есть
}
Випроцедура на TMSNMessenger.ReceiveSYN
<б>вар
Тмп: <б>строка
<б>начинается
FSocket.OnDataAvailable := <б>Нил
сон(<цвет шрифта="#800080">5000)
В Тмп := FSocket.ReceiveStr
В FSocket.OnDataAvailable := SocketDataAvailable
В Тмп := UTF8ToAnsi(Тмп)
и как logwrite(<цвет шрифта="#800000">'принято :' Тмп)
В SocketWrite(<цвет шрифта="#800000">'ЧГ %д НЛН')
<б>конец
<б>процедура
на TMSNMessenger.SendVER
<б>начинается
SocketWrite(<цвет шрифта="#800000">'Сильвер %д CVR0 MSNP5 MSNP6 MSNP7')
<б>конец
<б>процедура
на TMSNMessenger.SetFriendlyUserName(<б>константный значение: <б>строка
в)
<б>вар
тмп: <б>строка
<б>начать
если FConnected <б>и
(FUserName <> значение) и тут
и начинается
тмп := StringReplace(значения <цвет шрифта="#800000">' ', <цвет шрифта="#800000">' ', [rfReplaceAll])
В тмп := AnsiToUtf8(Тмп)
В SocketWrite(<цвет шрифта="#800000">'РИ %д' FUsername <цвет шрифта="#800000">' ' тмп)
<б>конец
<б>конец
<б>процедура
в TMSNMessenger.SetHost(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>потом
если FSocket.Адрес <> значение <б>то есть
FSocket.Адрес := значение
<б>конец
<б>процедура
в TMSNMessenger.Задание пароля(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>затем
если (FPassword <> значение) <б>то есть
FPassword := Значение
<б>конец
<б>процедура
в TMSNMessenger.SetPort(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>потом
если FSocket.Порт <> значение <б>то есть
FSocket.Порт := значение
<б>конец
<б>процедура
в TMSNMessenger.Выполнении функция setstate(<б>константный значение: TUserState)
<б>начать
если FConnected <б>потом
если (FState <> значение) <б>то есть
SocketWrite( RealState[значение] )
<б>конец
<б>процедура
на TMSNMessenger.SetUserName(<б>константный значение: <б>строка
в)
<б>начать
если не FConnected , и тогда
если FUsername <> значение <б>то есть
FUserName := значение
<б>конец
<б>процедура
на TMSNMessenger.SocketConnect(Отправитель: TObject ошибка: слово)
<б>начинается
FTrialID := <цвет шрифта="#800080">1
В SendVER
<б>конец
<б>процедура
в TMSNMessenger.SocketDataAvailable(Отправитель: TObject ошибка: слово)
<б>вар
Тмп: <б>строка
<б>начинается
Тмп := FSocket.ReceiveStr
В Тмп := UTF8ToAnsi(Тмп)
и как logwrite(<цвет шрифта="#800000">'принято :' Тмп)
В ProcessCommand(Тмп)
<б>конец
<б>процедура
на TMSNMessenger.SocketDisconnect(Отправитель: TObject ошибка: слово)
<б>начинается
FConnected := ложь
и как logwrite(<цвет шрифта="#800000">'отключен')
<б>конец
<б>процедура в TMSNMessenger.SocketWrite(<б>константный строка: <б>строка в)
<б>начинается
FSocket.SendStr(Формат(строка, [FTrialID]) <цвет шрифта="#800000">#13 <цвет шрифта="#800000">#10)
и как logwrite(<цвет шрифта="#800000">'Отправлено :' Формат(строка, [FTrialID]))
В Инк(FTrialID)
<б>конец
<б>процедура TMSNMessenger.TriggerFriendlyNameChange
<б>начать
если , и назначена(FFriendlyNameChange) <б>то есть
FFriendlyNameChange(Самовыдвижение)
<б>конец
<б>конец.< & & & & & & & & & & & & & & & & -/код & & & & & & & & & & & & & & & & & & & -> пример был бы: AMSN := TMSNMessenger.Создания(самостоятельного) // AMSN является переменной TMSNMessenger Тип AMSN.Имя пользователя := " // указывает имя пользователя, который всегда должен быть в форме *@hotmail.com AMSN.Пароль := " //это указывает на AMSN пароль.Отчет := Наименованием "Memo1".Линии // журнал указывает пункт назначения, чтобы сбросить полученные и отправленные данные, я использую его для поиска информации, протокола и прочее, но это не обязательно использовать его AMSN.Логин // процедура, которая означает, что мы должны начать процесс входа в систему









В MSN Messenger в делфи


В MSN Messenger в делфи : Несколько тысяч советов, которые сделают вашу жизнь проще.


<р>как работать с MSN мессенджера протоколом в Delphi
и<р><размер шрифта="5">эта статья серьезно устарела и будет обновлена в ближайшее время

<п />и

Это реализация посыльный MSN протокола в Delphi это не полный и для того, чтобы ее построить вам понадобятся WSocket пакет, то большинство из того, что представлено здесь, является частью Спецификация (еще не хватало, чтобы даже урезанный клон МСН мессенджер). Работы, которые вы видите здесь, имеет свои задачи (большинство из-за того, что я просто новичок в программировании сокетов), данная статья основана на работах статьи venkydude MSN и старой версии KMerlin (с открытым исходным кодом MSN мессенджера клон для Linux). В этой статье я пишу о обмен мгновенными сообщениями (первый о Yahoo протоколу, который я не смог завершить из-за нехватки времени (много работы)) я планирую обновлять эту статью, как только возможное <р>< & & & & & & & & & & & & & & & & -код & & & & & & & & & & & & & & & & & & & & >

<код><шрифта лицо="курьер Нью" Размер="3"><цвет шрифта="#число 0000ff"><я>{глобальный задач: ввести локальные задачи, очистки, продления}
Виустройство в MSNMessenger
<б>интерфейс
использование функции
WSocket, алгоритм MD5, классы, Модуля приведет к
<б>Тип
и TUserState = (
В usOnline, <цвет шрифта="#число 0000ff"><я>// Вы не Интернет
usBusy, <цвет шрифта="#число 0000ff"><я>// на самом деле занят и
usBRB, <цвет шрифта="#число 0000ff"><я>// вернусь и
usAway, <цвет шрифта="#число 0000ff"><я>// выезде в
usOnPhone, <цвет шрифта="#число 0000ff"><я>//о
телефон usLunch, <цвет шрифта="#число 0000ff"><я>//обед с
usHidden, <цвет шрифта="#число 0000ff"><я>//скрытой и
usOffline <цвет шрифта="#число 0000ff"><я>//автономных и
)
В TMSNMessenger = <Б>класс(TComponent)
<б>Частная
и FConnected: логическое
В FUserName: <б>строка
FPassword: <б>строка
FFriendlyUserName: <б>строка
пороть: TStrings
В FFriendlyNameChange: TNotifyEvent
В FState: TUserState
<б>функции в GetHost: <б>строка
<б>процедура на SetHost(<б>константный значение: <б>строка в)
<б>функции , и GetPort: и строка
<б>процедура
на SetPort(<б>константный значение: <б>строка в)
<б>процедура SetUserName(<б>константный значение: <б>строка в)
<б>процедура , и задание пароля(<б>константный значение: и строка в)
<б>функции в GetFriendlyUserName: <б>строка
<б>процедура на SetFriendlyUserName(<б>константный значение: <б>строка в)
<б>процедура : при выполнении функция setstate(<б>константный значение: TUserState)
<б>защищенные и
FSocket: TWSocket
В FTrialID: число
<б>процедура в SendVER
<б>процедура на ReceiveSYN
<б>процедура на SocketWrite(<б>константный строка: <б>строка)
<б>процедура , и как logwrite(<б>константный данные: <б>строка в)
<б>процедура на ProcessCommand(<б>константный команда: <б>строка в)
<б>процедура в SocketDisconnect(Отправитель: TObject ошибка: слово)
<б>процедура в SocketDataAvailable(Отправитель: TObject ошибка: слово)
<б>процедура на SocketConnect(Отправитель: TObject ошибка: слово)
<б>процедура на TriggerFriendlyNameChange <б>динамичность
<б>общие
конструктор создать(AOwner: TComponent) <б>переопределить
<б>деструктор уничтожить <б>переопределить
<б>процедура логин
<б>процедура на выходе
<б>опубликовано на
свойства на хост: <б>строка GetHost <б>пишут SetHost
<б>недвижимость в Порт <б>строка , и GetPort <б>пишут SetPort
<б>собственность Имя пользователя: <б>строка FUserName <б>пишут SetUserName
<б>собственность пароль: <б>строка FPassword <б>пишут , и задание пароля
<б>собственность FriendlyUserName: <б>строка GetFriendlyUserName <б>пишут SetFriendlyUserName
<б>недвижимость в связи: логическое и ознакомиться на FConnected
<б>недвижимость в лог: TStrings и ознакомиться , и пороть <б>пишут выпороть
<б>собственность FriendlyNameChange: TNotifyEvent и ознакомиться на FFriendlyNameChange <б>пишут FFriendlyNameChange
<б>собственность Статус: TUserState и ознакомиться в FState <б>пишут : при выполнении функция setstate
<б>конец
<б>реализация
использование окна
<б>константный RealState: <б>массив[TUserState] <б>строки =
и (<цвет шрифта="#800000">'ЧГ %д НЛН', <цвет шрифта="#800000">'ЧГ %д школа бум', <цвет шрифта="#800000">'ЧГ %д БРБ', <цвет шрифта="#800000">'ЧГ %д авиалиниях', <цвет шрифта="#800000">'ЧГ %д ПТС', <цвет шрифта="#800000">'ЧГ %д лунь,
<цвет шрифта="#800000">'ЧГ %д СЗР', <цвет шрифта="#800000">'ЧГ %д НФО' )
<б>Тип
и Кодировка = В наборе чар
<б>функции
в UTF8ToAnsi(х: <б>строка): ansistring
<цвет шрифта="#число 0000ff"><я>{ функция, которая получает в UTF8 строку и преобразует в
В ANSI строку }в
<б>вар
В мне: целое число
В В1, В2: байт
<б>начинается
результат := х
я := <цвет шрифта="#800080">1
<Б>А мне <= Длина(результат) <б>начинаются
если (орд(результат[я]) и <цвет шрифта="#800080">$80) <> <цвет шрифта="#800080">0 <б>потом начинается
Б1 := ОГА(результат[я])
В Б2 := ОГА(результат[я <цвет шрифта="#800080">1])
при (В1 и <цвет шрифта="#800080">$Ф0) <> <цвет шрифта="#800080">$Ц0 <б>то есть
результат[я] := <цвет шрифта="#800000">#128
В <б>еще начинается
результат[я] := ЧР((В1 <б>ЗЫ <цвет шрифта="#800080">6) или (В2 и <цвет шрифта="#800080">$3ф))
и удалить(результат, я <цвет шрифта="#800080">1, <цвет шрифта="#800080">1)
<б>конец
<б>конец
Инк(я)
<б>конец
<б>конец
<б>функции
в AnsiToUtf8(х: ansistring): и строка
<цвет шрифта="#число 0000ff"><я>{ функция, которая принимает строку и преобразует в ANSI
для строк UTF8 }в
<б>вар
В
мне: целое число
В В1, В2: байт
<б>начинается
результат := х
для мне := Длина(результат) <б>до <цвет шрифта="#800080">1 <б>делать
если
в результате[я] >= <цвет шрифта="#800000">#127 <б>затем начинается
Б1 := <цвет шрифта="#800080">$Ц0 или (орд(результат[я]) <б>ГТК <цвет шрифта="#800080">6)
В Б2 := <цвет шрифта="#800080">$80 или (ОГА(результат[я]) и <цвет шрифта="#800080">$3ф)
В результате[я] := ЧР(В1)
и вставить(ЧР(В2), результат, я <цвет шрифта="#800080">1)
<б>конец
<б>конец
<б>функции
, и ExtractWord(Н:целое число S: истрока WordDelims:Кодировка): истрока
<б>Вар
В
мне,Дж:слова
В подсчет:число
и Слен:Целое число
<б>начинается
граф := <цвет шрифта="#800080">0
я := <цвет шрифта="#800080">1
В результате := <цвет шрифта="#800000">"
и Слен := Длина(с)
<Б>А
мне <= Слен <б>делать начинается
<цвет шрифта="#число 0000ff"><я>{preskoc oddelovace}
В <Б>А (Я <= Слен) <б>и
(С[Я] В WordDelims) <б>делать Инк(я) в
<цвет шрифта="#число 0000ff"><я>{нени-ли на konci retezce, буде nalezen zacatek слова}
В при мне <= Слен и тогда Инк(счет)
и Х := У меня есть
<цвет шрифта="#число 0000ff"><я>{а зде йе конец слова}
В <Б>А (К <= Слен) и не(s[Дж] В на WordDelims) и у Инк(Дж)
<цвет шрифта="#число 0000ff"><я>{йе-ли Тото н-т е слово, vloz хо на выступ}
В при Кол-во = Н <Б>затем начинается
результат := экземпляр(ы,я,Ю-Я)
на выходе
<б>конец
я := Дж
<б>конец <цвет шрифта="#число 0000ff"><я>{А} и
в конце

<б>функции
на WordAt(<б>константный
текст : и строка на установки : целое число) : текст строка
<б>начинается
результат := ExtractWord(положение, текст, [<цвет шрифта="#800000">' '])
<б>конец
<цвет шрифта="#число 0000ff"><я>{ TMSNMessenger }в
<б>конструктор TMSNMessenger.Создать(AOwner: TComponent)
<б>начинается
наследство создать(AOwner)
В FSocket := TWSocket.Создать(Самовыдвижение)
В FSocket.Значение addr := <цвет шрифта="#800000">'messenger.hotmail.com'
В FSocket.Порт := <цвет шрифта="#800000">'1863'
В FSocket.Прото:= <цвет шрифта="#800000">'ПТС'
В FSocket.OnSessionConnected := SocketConnect
В FSocket.OnSessionClosed := SocketDisconnect
В FSocket.OnDataAvailable := SocketDataAvailable
В FConnected := ложь
<б>конец
<б>деструктор TMSNMessenger.Уничтожить
<б>начинается
FSocket.Бесплатные
FSocket := <б>Нил
<б>наследство уничтожить
<б>конец

<б>функции
в TMSNMessenger.GetFriendlyUserName: <б>строка
<б>начать
если не FConnected <б>то есть
результат := FFriendlyUserName
<б>конец
<б>функции
в TMSNMessenger.GetHost: <б>строка
<б>начинается
результат := FSocket.АДР
<б>конец
<б>функции TMSNMessenger.GetPort: <б>строка
<б>начинается
результат := FSocket.Порт
<б>конец
<б>процедура TMSNMessenger.Логин
<б>начинается
FSocket.Подключения
<б>конец
<б>процедура TMSNMessenger.Выход
<б>начинается
конец
<б>процедура
в TMSNMessenger.Как logwrite(<б>константный данные: <б>строка
в)
<б>начать
если
, и назначена( пороть ) <б>то есть
выпороть.Добавить(данные)
<б>конец
<цвет шрифта="#число 0000ff"><я>{Processcommand здесь сродни процедуре windowproc
как мы обрабатываем все виды информации, переданных с сервера
как сейчас это IFFull (полный ли это) возможно, если бы я
есть немного свободного времени станет в этом случае
В ТОДО: Очистить этот порядок испортить и
todo: добавьте больше команд}
Випроцедура в TMSNMessenger.ProcessCommand
<б>вар
Тмп: <б>строка
хэш: <б>строка
<б>начинается
Тмп := WordAt(команда, <цвет шрифта="#800080">1) в
при Тмп = <цвет шрифта="#800000">'Сильвер' <б>то есть
SocketWrite(<цвет шрифта="#800000">'инф %д') и
при Тмп = <цвет шрифта="#800000">'инф' /шрифт><б>то есть
SocketWrite(<цвет шрифта="#800000">'УСР %д с MD5 я ' FUserName)
при Тмп = <цвет шрифта="#800000">'ЕГР' , и тогда
и начинается
если WordAt(команда, <цвет шрифта="#800080">4) = <цвет шрифта="#800000"> " с " , и тогда
и начинается
хэш := WordAt(команда, <цвет шрифта="#800080">5)
и удалить(хэш, пос(<цвет шрифта="#800000">#13#10, Хэш), длины(хэш))
хэш := StrMD5(хэш пароля)
В SocketWrite(<цвет шрифта="#800000">'УСР %д MD5 В С' строчные(хэш))
<б>конец еще
и начинается
FFriendlyUserName := WordAt(команда, <цвет шрифта="#800080">5)
В SocketWrite(<цвет шрифта="#800000">'Син %д 1')
В ReceiveSYN
<б>конец
<б>конец
<цвет шрифта="#число 0000ff"><я>{когда появляется xfr, и Вы не подключены
к MSN сервера это означает перенаправление на другой сервер}в
при (ТМП = <цвет шрифта="#800000">'деятельность компании xfr') и не подключено <б>затем
и начинается
ТМП := WordAt(команда, <цвет шрифта="#800080">4)
В FSocket.Рядом с
удалить(ТСП, пос(<цвет шрифта="#800000">':', Тмп), Длина(Тмп))
В FSocket.Адрес := Тмп
В ТМП := WordAt(команда, <цвет шрифта="#800080">4)
и удалить(Тмп <цвет шрифта="#800080">1, пос.(<цвет шрифта="#800000">':', Тмп))
В FSocket.Порт := Тмп
В FSocket.Подключения
на выходе
<б>конец
<цвет шрифта="#число 0000ff"><я>{переименовать имя} и
при (ТМП = <цвет шрифта="#800000">'РЭА') и тут
и начинается
FFriendlyUserName := WordAt(команда, <цвет шрифта="#800080">5)
В FFriendlyUserName := StringReplace(FFriendlyUserName, <цвет шрифта="#800000">' ', <цвет шрифта="#800000">' ', [rfReplaceall])
В TriggerFriendlyNameChange
<б>конец
<цвет шрифта="#число 0000ff"><я>{из команды до сервера
что разъединяет нас, если это потому, что мы вошли в другую машину
мы получили сообщение из другой (другая машина)
как сделать запись какого-либо события или что-то для получения этого уведомления}в
при (ТМП = <цвет шрифта="#800000">выход) и тут
и начинается
если
в пос(<цвет шрифта="#800000">'дру', команда) > <цвет шрифта="#800080">1 <б>то есть
как logwrite(<цвет шрифта="#800000">'войти в другой компьютер отключение')
<б>конец
<б>конец
<цвет шрифта="#число 0000ff"><я>{Син-это, без сомнения, самый информацияполный посыльный MSN команду
и Син сообщает нам:
В наличии по электронной почте
и друг
списка черный список
в обратный список (люди, которые вас в свои списки)
все номера телефонов (Домашний, мобильный и т. д.)
В MSN мессенджера параметры
и т. д.
однако, это приходит с ценой, поскольку существует так много информации
WSocket не может получить все данные правильно (качество не блокирующих сокетов)
таким образом для того чтобы сделать это мы будем мерзнуть этой теме в течение 5 секунд
вы(то есть ваши формы не будет получать никаких Сообщений
и, кажется, не отвечает на некоторое время), я
вы знаете, там должен быть лучший способ, если кто-то знает, напишите мне.
и сделать анализ полученных данных.
на будущее : найти способ, который не придется мерзнуть нить есть
}
Випроцедура на TMSNMessenger.ReceiveSYN
<б>вар
Тмп: <б>строка
<б>начинается
FSocket.OnDataAvailable := <б>Нил
сон(<цвет шрифта="#800080">5000)
В Тмп := FSocket.ReceiveStr
В FSocket.OnDataAvailable := SocketDataAvailable
В Тмп := UTF8ToAnsi(Тмп)
и как logwrite(<цвет шрифта="#800000">'принято :' Тмп)
В SocketWrite(<цвет шрифта="#800000">'ЧГ %д НЛН')
<б>конец
<б>процедура
на TMSNMessenger.SendVER
<б>начинается
SocketWrite(<цвет шрифта="#800000">'Сильвер %д CVR0 MSNP5 MSNP6 MSNP7')
<б>конец
<б>процедура
на TMSNMessenger.SetFriendlyUserName(<б>константный значение: <б>строка
в)
<б>вар
тмп: <б>строка
<б>начать
если FConnected <б>и
(FUserName <> значение) и тут
и начинается
тмп := StringReplace(значения <цвет шрифта="#800000">' ', <цвет шрифта="#800000">' ', [rfReplaceAll])
В тмп := AnsiToUtf8(Тмп)
В SocketWrite(<цвет шрифта="#800000">'РИ %д' FUsername <цвет шрифта="#800000">' ' тмп)
<б>конец
<б>конец
<б>процедура
в TMSNMessenger.SetHost(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>потом
если FSocket.Адрес <> значение <б>то есть
FSocket.Адрес := значение
<б>конец
<б>процедура
в TMSNMessenger.Задание пароля(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>затем
если (FPassword <> значение) <б>то есть
FPassword := Значение
<б>конец
<б>процедура
в TMSNMessenger.SetPort(<б>константный значение: <б>строка
в)
<б>начать
если не подключено <б>потом
если FSocket.Порт <> значение <б>то есть
FSocket.Порт := значение
<б>конец
<б>процедура
в TMSNMessenger.Выполнении функция setstate(<б>константный значение: TUserState)
<б>начать
если FConnected <б>потом
если (FState <> значение) <б>то есть
SocketWrite( RealState[значение] )
<б>конец
<б>процедура
на TMSNMessenger.SetUserName(<б>константный значение: <б>строка
в)
<б>начать
если не FConnected , и тогда
если FUsername <> значение <б>то есть
FUserName := значение
<б>конец
<б>процедура
на TMSNMessenger.SocketConnect(Отправитель: TObject ошибка: слово)
<б>начинается
FTrialID := <цвет шрифта="#800080">1
В SendVER
<б>конец
<б>процедура
в TMSNMessenger.SocketDataAvailable(Отправитель: TObject ошибка: слово)
<б>вар
Тмп: <б>строка
<б>начинается
Тмп := FSocket.ReceiveStr
В Тмп := UTF8ToAnsi(Тмп)
и как logwrite(<цвет шрифта="#800000">'принято :' Тмп)
В ProcessCommand(Тмп)
<б>конец
<б>процедура
на TMSNMessenger.SocketDisconnect(Отправитель: TObject ошибка: слово)
<б>начинается
FConnected := ложь
и как logwrite(<цвет шрифта="#800000">'отключен')
<б>конец
<б>процедура в TMSNMessenger.SocketWrite(<б>константный строка: <б>строка в)
<б>начинается
FSocket.SendStr(Формат(строка, [FTrialID]) <цвет шрифта="#800000">#13 <цвет шрифта="#800000">#10)
и как logwrite(<цвет шрифта="#800000">'Отправлено :' Формат(строка, [FTrialID]))
В Инк(FTrialID)
<б>конец
<б>процедура TMSNMessenger.TriggerFriendlyNameChange
<б>начать
если , и назначена(FFriendlyNameChange) <б>то есть
FFriendlyNameChange(Самовыдвижение)
<б>конец
<б>конец.< & & & & & & & & & & & & & & & & -/код & & & & & & & & & & & & & & & & & & & -> пример был бы: AMSN := TMSNMessenger.Создания(самостоятельного) // AMSN является переменной TMSNMessenger Тип AMSN.Имя пользователя := " // указывает имя пользователя, который всегда должен быть в форме *@hotmail.com AMSN.Пароль := " //это указывает на AMSN пароль.Отчет := Наименованием "Memo1".Линии // журнал указывает пункт назначения, чтобы сбросить полученные и отправленные данные, я использую его для поиска информации, протокола и прочее, но это не обязательно использовать его AMSN.Логин // процедура, которая означает, что мы должны начать процесс входа в систему


В MSN Messenger в делфи

В MSN Messenger в делфи : Несколько тысяч советов, которые сделают вашу жизнь проще.
рекомендовать друзьям
  • gplus
  • pinterest

Комментарий

Оставить комментарий

Оценивать