Ionic 4 mobil uygulaması ve Angular web uygulaması arasında Socket.io kullanarak gerçek zamanlı iletişim kurmak — 2

Mehmet Akın
6 min readJul 14, 2019

--

OrderingAPP uygulamamız için geliştirdiğimiz ve backend işlemlerini içeren bir önceki yazıya bu linkten ulaşabilirsiniz.

Bu yazıda Angular Web projemizi ve ionic 4 Mobile projemizi oluşturacağız.

Angular Web Projesi Oluşturma

Bunun için öncelikle Angular uygulamaları yaratabilmemiz için gerekli olan “angular cli” kurulumunu yapmamız gerekiyor. Aşağıdaki komut ile angular cli kurulumunu yapıyoruz.

npm install -g @angular/cli

Sonrasında “OrderingApp” klasörü içerisindeyken aşağıdaki komutu çalıştırarak angular projemizi oluşturuyoruz.

ng new frontend
cd frontend

frontend klasörü içerisindeyken “code .” komutu ile projemizi VSCode ile açıp geliştirmelerimizi yapabiliriz.

Basit bir Sipariş Ekleme ekranı tasarlayacağız. Bunun için responsive front-end framework olan “materialize-css” kullancağız. VSCode içerisine Terminal görünümüne geçip aşağıdaki npm komutu yardımıyla ilgili paketi yüklüyoruz.

npm i materialize-css --save

Uygulamamızda bu paketi kullanabilmemiz için gerekli CSS ve Javascript dosyalarını refere etmemiz gerekiyor. Bunun için “angular-cli.json” dosyası içerisindeki “styles” ve “scripts” alanlarına dosyalarımızın path bilgisini yazıyoruz.

Material ikonlarını kullanabilmemiz için de index.html sayfasında <head> tag’i içerisine aşağıdaki linki refere etmemiz gerekiyor;
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

Sipariş ekleme formu için “add-order” adında bir component oluşturacağız. Aşağıdaki ng komutu ile ilgili component’imizi oluşturuyoruz.

ng generate component add-order

Oluşturacağımız Html’den yani View’dan component’e veriyi gönderebilmemiz için bir model’e ihtiyacımız var. Bunun için app klasörü içerisinde “models” adında bir klasör ve içerisine de “order.ts” dosyasını ekliyoruz. Order.ts dosyası içerisinde aşağıdaki gibi property’lerimizi oluşturuyoruz.

add-order.component.ts içerisinde oluşturduğumuz Order modelimizden bir object yaratıp initial değerlerini set ediyoruz.

order: Order = { orderDetail: “”, cost: 0, createdBy: “MMA” };

add-order.component.html dosyamızı çok basit 2 tane text input ve 1 tane de button içerecek şekilde aşağıdaki gibi revize ediyoruz.

View kısmında yapılan değişikliğin doğrudan model’e (component’e) veya model’de (component’te) yapılan değişikliğin doğrudan view’e yansıması için Two-way binding yapısını kullanıyoruz. “[(ngModel)]” syntax’ı ile modelimize two-way binding özelliği veriyoruz.

App.module.ts dosyası içerisinde bootstrap olarak AppComponent belirtilmiştir. Yani “ng serve” komutu ile Angular projemizi başlattığımızda ilk yüklenecek component app.component olacaktır. Biz de “add-order” componentimizin render olabilmesi için, add-order.component.ts dosyamız içerisinde bulunan ve ilgili component’imizi temsil eden selector değerini aşağıdaki gibi “app.component.html” sayfası içerisine html tag’i olarak yazıyoruz.

frontend klasörü içerisindeyken ng serve -open komutu ile web uygulamamızı tarayıcımızda “http://localhost:4200/” URL’si üzerinden host ediyoruz.

Backend tarafında oluşturduğumuz API’mizi frontend tarafında çağırmak için servis dosyamızı oluşturacağız. Bunun için aşağıdaki komut ile services adında bir klasör oluşturup içerisinde ilgili servisimizi ekliyoruz.

ng g s services/order

Servis dosyamızın içeriği aşağıdaki gibidir;

createOrder fonksiyonu içerisindeki “environment” objemizi import ediyoruz ve environment.ts dosyamız içerisinde “backendUrl” adında key yaratıp değerini de “http://localhost:3000/” olarak set ediyoruz.

add-order.component.ts dosyamızdaki onCreateOrder fonksiyonumuzu aşağıdaki gibi revize ediyoruz.

constructor içerisinde order servisimi dependency injection ile implement ediyoruz. onCreateOrder fonksiyonu içerisinde de servisimizi subscribe ediyoruz.

Socket.io-client ile Event Emitting

Siparişimizi başarıyla oluşturduktan sonra socket.io yardımıyla event emit işlemi yapacağız. Backend server’ımıza işlemin başarıyla kaydedildiğini bildireceğiz ve server’da Mobil uygulamamız için yeni bir socket açacağız. Bu açtığımız socket ile de mobil uygulamamıza siparişin kaydedildiğini bildireceğiz.

Öncelikle angular projemize “socket.io-client” npm paketini yükleyeceğiz.

npm i socket.io-client --save

add-order.component.ts dosyamız içerisine aşağıdaki şekilde “io” socket.io import işlemini yapıyoruz.

import * as io from "socket.io-client";

constructor içerisini aşağıdaki gibi revize ediyoruz.

onCreateOrder fonksiyonu içerisinde subscription sonucu siparişimiz başarıyla kaydediliyor ve “orderCreated” adında socket açıyoruz.

Bu açtığımız socketi server tarafında bir önceki yazımda belirttiğim gibi aşağıdaki kod blok’u ile dinliyoruz.

Server tarafında “getOrders” adında socket açıyoruz ve bu socketi’de Mobile uygulamamızda dinliyor olacağız.

Ionic 4 Mobil Projesi Oluşturma

Ionic framework’ünü aşağıdaki komut ile npm yardımıyla indiriyoruz

npm install -g ionic

OrderingApp projemiz içerisinde aşağıdaki komut ile ionic projemizi oluşturuyoruz

ionic start mobile blank --type=angular

Projemizin adına “mobile” ismini veriyoruz. Template’imizi boş “blank” olarak ifade edip, angular frameworkü ile geliştireceğimiz için “type” olarak angular belirtiyoruz.

Kurulum sonunda aşağıdaki gibi SDK kurulumu yapılsın mı sorusu karşınıza çıkıyor. Bu soruya “No” cevabı vererek kurulumu tamamlıyoruz.

Mobile klasörümüzün içerisine girip “orders” adında sayfa oluşturuyoruz.

cd Mobile
ionic generate page orders

App-routing.module.ts dosyamızdaki “routes” array objemizi aşağıdaki gibi revize ediyoruz. İlk açıldığında “home” sayfasına yönlenmesini önleyip yeni yarattığımız “orders” sayfasına yönlenmesini sağlıyoruz.

app klasörü altında “models” klasörü oluşturup “order.ts” adındaki modelimizi oluşturuyoruz.

Socket.io-client paketini aşağıdaki şekilde yüklüyoruz.

npm i socket.io-client --save

orders.page.ts dosyamız içerisine aşağıdaki şekilde “io” socket.io import işlemini yapıyoruz.

import * as io from "socket.io-client";

Environment.ts dosyamıza aşağıdaki gibi backendUrl bilgisini ekliyoruz

Orders.page.ts sayfamızın constructor içerisinde socket objemizi initialize ediyoruz

MongoDB veritabanında siparişleri alabilmemiz için backend projemiz ile konuşmamızı sağlayacak servis dosyamızı oluşturuyoruz

ionic generate service services/order

order.services.ts dosyamızı aşağıdaki gibi geliştiriyoruz

Servis içerisinde GET HTTP metodu ile çağırdığımız veriyi IOrder interface’i ile karşılayıp, map rxjs operatörü ile de Order class tipimize mapping işlemi yapıyoruz. Bunun için interfaces adında klasör oluşturup içerisine aşağıdaki gibi IOrder.ts Interface’imizi ekliyoruz.

Servis katmanımızı tamamladıktan sonra orders.page.html HTML sayfamızı aşağıdaki gibi geliştiriyoruz.

HTML sayfamızın ardından orders.page.ts dosyamızı da aşağıdaki gibi geliştiriyoruz;

constructor içerisinde socket’imizi initialize ediyoruz. ngOnInit() içerisinde de backend tarafından açtığımız “getOrders” socketimizi dinliyoruz.

Mobile uygulamamızı aşağıdaki komut ile çalıştırıyoruz.

ionic serve

Uygulamamız yukarıdaki gibi siparişlerimizi listelemiş olacak. Angular web uygulamamızı açıp siparişi kaydettiken sonra anlık olarak mobil uygulamamızdaki liste güncellenmiş olacaktır.

OrderingApp projesinin source code’una Github üzerinden ulaşabilirsiniz.

OrderingAPP uygulamamızın backend, frontend ve mobil tarafını elimden geldiğince tamamlamaya çalıştım. Eksik veya yanlış bir anlatımım olduysa lütfen birlikte düzeltelim.

Bir sonraki yazıda görüşmek dileğiyle…

--

--