Yangi mobil messenger "So'z"
«Gap»lar rivojlanayotgan bir davrda men ham messenjer yozishga bir nazar tashlab ko`ray dedim va biroz izlanishlar olib bordim. Bu postda aynan shu haqida sizlar bilan ulashmoqchiman.

Xo`sh messenjer o`zi nima u, qanday va nimalar bilan ishlaydi: hozirda tezkor xabar almashuvchi messenjer asosan bir nechta protokollarga asoslanib ishlaydi(shulardan men biladigan ko`p tarqalgani IM, Jabber). Tizim ikki qismdan server va klientdan iborat bo`ladi.
Men XMPP(yoki jabber)dan foydalanib android uchun sodda messenjer yozib ko`rdim va uni «So`z» deb nomladim(buyog`i endi davom etib ketaveradi gap, so`z, harf, g`iybat… :)). Yozilgan dastur yanada universalroq bo`lishi uchun uni istalgan XMPP serverga ulanish imkoni bo`lishiga harakat qildim va dasturni testlash davomida men muloqot.uz saytidan foydalandim. Ha muloqot.uz sayti ham foydalanuvchilar o`rtasida xabar almashish uchun XMPPdan foydalanishadi.
XMPPni androidda ishlatish uchun men asmack kutubxonasidan foydalandim. asmack smack kutubxonasining android uchun moslab yozilgani . Messenjerimizni yozish uchun asmack kutubxinasi JAR faylini projectimizdagi libs katalogiga tashlab qoyamiz va projectimizning Preference oynasini ochib Build path bo`limiga o`tib libraries qismiga ham qo`shib qoyamiz. E`tibor bering har qanday JAR faylli kutubxonani import qilganimizda har xil ko`ngilsizliklardan qochish uchun uni projectdagi libs katalogiga tashlab qoyganingiz ma`qul.
Avvalo XMPPconnectionni amalga oshirib olamiz
Ana endi biz aloqadamiz. asmack kutubxonasi yaratib bergan imkoniyatlar tufayli biz yaratgan connectionimizga ChatListener o`rnatib qo`ysak undagi funksiyalar xabar server bilan o`rtada ko`prik vazifasini bajarib beradi.
Yuqoridagi kod xabar kelishini eshitib turish uchun yozilgan, xabar kelishi bilan uni xabarlar listiga qo`shib qo`yadi.
Xabarlarni yuborishda, yuborish tugmasi bosilganda xabar maydoniga yozilgan matnni ko`rsatilgan suhbatdoshga Message obyekti orqali yuborish kifoya
Dasturning asosiy kodlari shulardan iborat. Ko`rib turganingizdek bu unchalik qiyin emas. Fqat endi bu dasturni sal kengaytirish qoldi xolos. Quyida dastur kodi biriktirilgan bo`lib siz unda bu yerda yozilmagan bir mechta kichik dunksiyalarni ko`rishingiz mumkin: masalan yuborilayotgan xabarni va suhbatdoshni ko`rsatilganligini tekshirish va shunga o`xshagan.
Dastur ishlashi uchun Manifest faylga internetdan foydalanish uchun ruxsat so`rash kifoya
Keltirilgan maqola va kod to`grisida fikr va mulohazalaringiz men uchun juda ham muhim.
Dastur va dastur kodi buyerda.

Xo`sh messenjer o`zi nima u, qanday va nimalar bilan ishlaydi: hozirda tezkor xabar almashuvchi messenjer asosan bir nechta protokollarga asoslanib ishlaydi(shulardan men biladigan ko`p tarqalgani IM, Jabber). Tizim ikki qismdan server va klientdan iborat bo`ladi.
Men XMPP(yoki jabber)dan foydalanib android uchun sodda messenjer yozib ko`rdim va uni «So`z» deb nomladim(buyog`i endi davom etib ketaveradi gap, so`z, harf, g`iybat… :)). Yozilgan dastur yanada universalroq bo`lishi uchun uni istalgan XMPP serverga ulanish imkoni bo`lishiga harakat qildim va dasturni testlash davomida men muloqot.uz saytidan foydalandim. Ha muloqot.uz sayti ham foydalanuvchilar o`rtasida xabar almashish uchun XMPPdan foydalanishadi.
XMPPni androidda ishlatish uchun men asmack kutubxonasidan foydalandim. asmack smack kutubxonasining android uchun moslab yozilgani . Messenjerimizni yozish uchun asmack kutubxinasi JAR faylini projectimizdagi libs katalogiga tashlab qoyamiz va projectimizning Preference oynasini ochib Build path bo`limiga o`tib libraries qismiga ham qo`shib qoyamiz. E`tibor bering har qanday JAR faylli kutubxonani import qilganimizda har xil ko`ngilsizliklardan qochish uchun uni projectdagi libs katalogiga tashlab qoyganingiz ma`qul.
Avvalo XMPPconnectionni amalga oshirib olamiz
ConnectionConfiguration cc = new ConnectionConfiguration(host,Integer.parseInt(port), service);
XMPPConnection connection = new XMPPConnection(host);
connection.connect();
// foydalanuvchi ma`lumotlarini kiritib LOGINni amalga oshirish
connection.login(username, password);Ana endi biz aloqadamiz. asmack kutubxonasi yaratib bergan imkoniyatlar tufayli biz yaratgan connectionimizga ChatListener o`rnatib qo`ysak undagi funksiyalar xabar server bilan o`rtada ko`prik vazifasini bajarib beradi.
Xabar qabul qilish
connection.getChatManager().addChatListener(
new ChatManagerListener() {
@Override
public void chatCreated(Chat chat,boolean createdLocally) {
if (!createdLocally) {
// yangi chatListener yaratamiz
chat.addMessageListener(new MessageListener() {
@Override
public void processMessage(Chat chat,Message message) {
// agar xabar bo`sh bo`lmasa xabar bo`sh bo`lishi ham mumkin, masalan suhbatdosh matnni
// yozayotgan paytta NULL xabar kelib turadi shunda suhbatdosh yozayotganmligini ham bilish
// mumkin
if (message.getBody() != null) {
// kelgan xabarni kerakli ma`lumotlarini olib messageList ga qo`shamiz
messages.add(StringUtils.parseBareAddress(message.getFrom())+ ":\n" + message.getBody());
// ListViewni qayta sozlaymiz
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
}
});
}
}
});
}
}
});Yuqoridagi kod xabar kelishini eshitib turish uchun yozilgan, xabar kelishi bilan uni xabarlar listiga qo`shib qo`yadi.
Xabar yuborish.
Xabarlarni yuborishda, yuborish tugmasi bosilganda xabar maydoniga yozilgan matnni ko`rsatilgan suhbatdoshga Message obyekti orqali yuborish kifoya
// Xabarni yuborish uchun Message qutisiga kerakli ma`lumotlarni yozib
Message msg = new Message(recipient, Message.Type.chat);
msg.setBody(text);
// uni yuboramiz
connection.sendPacket(msg);
// yuborilgan xabarni Arraylisttga qo`yib qoyamiz
messages.add(connection.getUser() + ":\n" + text);
Log.d("So`z", msg.getBody() + " " + msg.getTo());
mHandler.post(new Runnable() {
public void run() {
// arraylistni Adapter bilan ListViewga biriktiramiz
setListAdapter();
}
});
Dasturning asosiy kodlari shulardan iborat. Ko`rib turganingizdek bu unchalik qiyin emas. Fqat endi bu dasturni sal kengaytirish qoldi xolos. Quyida dastur kodi biriktirilgan bo`lib siz unda bu yerda yozilmagan bir mechta kichik dunksiyalarni ko`rishingiz mumkin: masalan yuborilayotgan xabarni va suhbatdoshni ko`rsatilganligini tekshirish va shunga o`xshagan.
Dastur ishlashi uchun Manifest faylga internetdan foydalanish uchun ruxsat so`rash kifoya
<uses-permission android:name="android.permission.INTERNET" />Keltirilgan maqola va kod to`grisida fikr va mulohazalaringiz men uchun juda ham muhim.
Dastur va dastur kodi buyerda.
san luchshe xabber ishlat