Submit Search
Upload
XMPPクライアント・プログラミング
•
Download as PPTX, PDF
•
0 likes
•
1,691 views
隆行 神戸
Follow
2016年04月03日 西プロ(福岡市西区プログラミング勉強会資料) XMPPのクライアントプログラミングの初歩を紹介。
Read less
Read more
Internet
Report
Share
Report
Share
1 of 36
Download now
Recommended
テンプレート・エンジンVelocity
テンプレート・エンジンVelocity
隆行 神戸
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う
隆行 神戸
XMPPの紹介
XMPPの紹介
隆行 神戸
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
Shohei Hido
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
tak9029
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
🍻(Beer Mug)の読み方を考える(mecab-ipadic-NEologdのUnicode 絵文字対応)
🍻(Beer Mug)の読み方を考える(mecab-ipadic-NEologdのUnicode 絵文字対応)
Toshinori Sato
14対話bot発表資料
14対話bot発表資料
Keiichirou Miyamoto
Recommended
テンプレート・エンジンVelocity
テンプレート・エンジンVelocity
隆行 神戸
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う
隆行 神戸
XMPPの紹介
XMPPの紹介
隆行 神戸
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
Shohei Hido
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
tak9029
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
🍻(Beer Mug)の読み方を考える(mecab-ipadic-NEologdのUnicode 絵文字対応)
🍻(Beer Mug)の読み方を考える(mecab-ipadic-NEologdのUnicode 絵文字対応)
Toshinori Sato
14対話bot発表資料
14対話bot発表資料
Keiichirou Miyamoto
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
Kenta Oono
Antプログラミング(1) - プラグイン
Antプログラミング(1) - プラグイン
隆行 神戸
Pythonによる画像処理について
Pythonによる画像処理について
Yasutomo Kawanishi
fastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
High performance python computing for data science
High performance python computing for data science
Takami Sato
PHP でファイルシステムを作ろう
PHP でファイルシステムを作ろう
shinjiigarashi
Pyconjp2016 pyftplib
Pyconjp2016 pyftplib
Shinya Okano
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
Satoshi Yamada
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
Satoshi Yamada
S15 t0 introduction
S15 t0 introduction
Takeshi Akutsu
形態素解析器の比較できるPythonパッケージつくった話
形態素解析器の比較できるPythonパッケージつくった話
Kensuke Mitsuzawa
Android道第1回公開用
Android道第1回公開用
Takaya Funabiki
S16 t1 python学習奮闘記#6
S16 t1 python学習奮闘記#6
Takeshi Akutsu
S20 t1 stapyのこれまでとこれから
S20 t1 stapyのこれまでとこれから
Takeshi Akutsu
Rとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指す
yuta july
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
Satoshi Yamada
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
順也 山口
Tensor flow勉強会3
Tensor flow勉強会3
tak9029
Requestsで始める5分前帰社
Requestsで始める5分前帰社
Satoshi Yamada
ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計
隆行 神戸
XMPP仕様簡単解説
XMPP仕様簡単解説
Keiichi Daiba
More Related Content
What's hot
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
Kenta Oono
Antプログラミング(1) - プラグイン
Antプログラミング(1) - プラグイン
隆行 神戸
Pythonによる画像処理について
Pythonによる画像処理について
Yasutomo Kawanishi
fastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
High performance python computing for data science
High performance python computing for data science
Takami Sato
PHP でファイルシステムを作ろう
PHP でファイルシステムを作ろう
shinjiigarashi
Pyconjp2016 pyftplib
Pyconjp2016 pyftplib
Shinya Okano
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
Satoshi Yamada
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
Satoshi Yamada
S15 t0 introduction
S15 t0 introduction
Takeshi Akutsu
形態素解析器の比較できるPythonパッケージつくった話
形態素解析器の比較できるPythonパッケージつくった話
Kensuke Mitsuzawa
Android道第1回公開用
Android道第1回公開用
Takaya Funabiki
S16 t1 python学習奮闘記#6
S16 t1 python学習奮闘記#6
Takeshi Akutsu
S20 t1 stapyのこれまでとこれから
S20 t1 stapyのこれまでとこれから
Takeshi Akutsu
Rとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指す
yuta july
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
Satoshi Yamada
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
順也 山口
Tensor flow勉強会3
Tensor flow勉強会3
tak9029
Requestsで始める5分前帰社
Requestsで始める5分前帰社
Satoshi Yamada
What's hot
(20)
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
Antプログラミング(1) - プラグイン
Antプログラミング(1) - プラグイン
Pythonによる画像処理について
Pythonによる画像処理について
fastTextの実装を見てみた
fastTextの実装を見てみた
High performance python computing for data science
High performance python computing for data science
PHP でファイルシステムを作ろう
PHP でファイルシステムを作ろう
Pyconjp2016 pyftplib
Pyconjp2016 pyftplib
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
S18 t0 introduction
S18 t0 introduction
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
S15 t0 introduction
S15 t0 introduction
形態素解析器の比較できるPythonパッケージつくった話
形態素解析器の比較できるPythonパッケージつくった話
Android道第1回公開用
Android道第1回公開用
S16 t1 python学習奮闘記#6
S16 t1 python学習奮闘記#6
S20 t1 stapyのこれまでとこれから
S20 t1 stapyのこれまでとこれから
Rとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指す
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
BERT の解剖学: interpret-text による自然言語処理 (NLP) モデル解釈
Tensor flow勉強会3
Tensor flow勉強会3
Requestsで始める5分前帰社
Requestsで始める5分前帰社
Viewers also liked
ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計
隆行 神戸
XMPP仕様簡単解説
XMPP仕様簡単解説
Keiichi Daiba
オレオレ言語実装に役立つプル型ASTウォーカーAPI
オレオレ言語実装に役立つプル型ASTウォーカーAPI
隆行 神戸
Message delivery over XMPP network
Message delivery over XMPP network
Hideki Saito
Transports on XMPP network
Transports on XMPP network
Hideki Saito
Openfire xmpp server on windows server 2012 r2 with spark sso
Openfire xmpp server on windows server 2012 r2 with spark sso
laonap166
Router chat for np
Router chat for np
Okuya Igarashi
どっかのしたのほう
どっかのしたのほう
_norin_
Maven基礎
Maven基礎
Toshio Takiguchi
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造
Taiji Tsuchiya
TCP/IPでネットワークが繋がるわけ「で・ね・と」
TCP/IPでネットワークが繋がるわけ「で・ね・と」
Takashi Abe
ネットワーク通信入門
ネットワーク通信入門
Yuki Suga
Viewers also liked
(12)
ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計
XMPP仕様簡単解説
XMPP仕様簡単解説
オレオレ言語実装に役立つプル型ASTウォーカーAPI
オレオレ言語実装に役立つプル型ASTウォーカーAPI
Message delivery over XMPP network
Message delivery over XMPP network
Transports on XMPP network
Transports on XMPP network
Openfire xmpp server on windows server 2012 r2 with spark sso
Openfire xmpp server on windows server 2012 r2 with spark sso
Router chat for np
Router chat for np
どっかのしたのほう
どっかのしたのほう
Maven基礎
Maven基礎
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造
TCP/IPでネットワークが繋がるわけ「で・ね・と」
TCP/IPでネットワークが繋がるわけ「で・ね・と」
ネットワーク通信入門
ネットワーク通信入門
Similar to XMPPクライアント・プログラミング
Yet anothor プロジェクト管理ツール ~Backlog~
Yet anothor プロジェクト管理ツール ~Backlog~
ikikko
ARCore
ARCore
m ishizaki
IkaLog_FPGAStartup1
IkaLog_FPGAStartup1
Takeshi HASEGAWA
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
Hiroshi Yamaguchi
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
Takuya Iwatsuka
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
apkiban
ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治
Drecom Co., Ltd.
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
Yoichiro Sakurai
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
kimulla
My portfolio
My portfolio
ssuserc2210b
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
晃 遠山
Collecting corpus
Collecting corpus
Atsushi Hayakawa
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.
Api
Api
Jun Chiba
WagtailとPelicanでJAMstack環境作ってみた
WagtailとPelicanでJAMstack環境作ってみた
Makoto Mochizuki
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
Yoshito Tabuchi
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
Naruhiko Ogasawara
はじめよう!PowerAppsキホンのキ kintone × Microsoft Flow / Logic Appsの話
はじめよう!PowerAppsキホンのキ kintone × Microsoft Flow / Logic Appsの話
典子 松本
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
ノンコーディングでやってみよう!Logic Appsのすゝめ
ノンコーディングでやってみよう!Logic Appsのすゝめ
典子 松本
Similar to XMPPクライアント・プログラミング
(20)
Yet anothor プロジェクト管理ツール ~Backlog~
Yet anothor プロジェクト管理ツール ~Backlog~
ARCore
ARCore
IkaLog_FPGAStartup1
IkaLog_FPGAStartup1
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
My portfolio
My portfolio
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
Collecting corpus
Collecting corpus
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
Api
Api
WagtailとPelicanでJAMstack環境作ってみた
WagtailとPelicanでJAMstack環境作ってみた
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
はじめよう!PowerAppsキホンのキ kintone × Microsoft Flow / Logic Appsの話
はじめよう!PowerAppsキホンのキ kintone × Microsoft Flow / Logic Appsの話
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
ノンコーディングでやってみよう!Logic Appsのすゝめ
ノンコーディングでやってみよう!Logic Appsのすゝめ
XMPPクライアント・プログラミング
1.
XMPPクライアント・プログラミング 神戸隆行(椎路ちひろ)Twitter: @ChihiroShiiji /
FB: takayuki.kando 2016/04/03(第13回福岡市西区プログラム勉強会資料)
2.
自己紹介 神戸 隆行(かんど
たかゆき)、PN. 椎路ちひろ(しいじ ちひろ) Twitter: @ChihiroShiiji / FB: takayuki.kando 出身は名古屋、趣味イラストとコスプレ 本業は九大の社会人博士課程で博士を取ろうとしながら研究開発に従事する有 期雇用の勤め人@百道浜 専門は流転中: 数値解析(のプログラミング・インターフェースの改良、修論@名大) →数式処理(のプログラミング・インターフェースの改良@某F研) →プログラム最適化(博士課程一回目の失敗@東工大) (2005年に仕事を紹介され福岡へ来た) →コンパイラ開発(Redefis、動的再構成可能プロセッサ向けコンパイラ) →SW/HW開発環境(IDE上からクラウド上の開発ツールを利用できるミドルウェア PTaaSの開発) http://www.qualiarc.com/?post_type=seihin&p=202 使用プログラミング言語: 最初はFORTRAN、大学以降はC++とC、今は主にJava、他は必要に応じてボチボチ 本日は趣味と仕事で利用しているXMPPのクライアント・プログラミング 幾つかのソースとサンプルをGitHub[ https://github.com/TakayukiKando/Lore ]に置いてます 2016/04/032 第13回福岡市西区プログラム勉強会
3.
本日の内容 2016/04/03第13回福岡市西区プログラム勉強会3 準備 1. XMPPサーバのインストール 2.
XMPPユーザアカウントの作成 3. Smack APIライブラリのインストール サンプルプログラム"EchoBot" 話かけるとオウム返ししてきて、以降無理やり5分毎に時報を 送ってくるやや迷惑なボット(自動クライアント) Gist "EchoBot.java": https://gist.github.com/TakayukiKando/ca0c72a07bcdd04f 7a55595895ea296d
4.
本日のターゲット(赤破線枠内): XMPPネットワークの構造と機能 XMPP サーバ XMPP クライアント XMPP サーバ・コン ポーネント XMPP クライアント XMPP クライアント XMPP クライアント 他所のXMPP サーバ UserA UserB ボット(ユーザがおらず自動応 答するクライアント) サーバに機 能を追加する メッセージ等をルーティ ングする ユーザを認証する ユーザーアカウント情 報を管理する ユーザの連絡先リスト を管理する オフライン・メッセージを 保管する 実装ポリシー: クライアントはUIに専念 サーバ側に様々な機能を実現 することが推奨されている 2016/04/034 第13回福岡市西区プログラム勉強会
5.
XMPPサーバのインストール 2016/04/03第13回福岡市西区プログラム勉強会5
6.
Openfireサーバの特徴 2016/04/03第13回福岡市西区プログラム勉強会6 配布元: ignite
realtime社、オープンソース 2016年4月2日現在の最新版は4.0.2 http://www.igniterealtime.org/projects/openfire/index.jsp 中小企業程度の規模までをターゲットとするXMPPサーバ XMPPとその拡張について一通りの機能は実装されている Web(9090番ポート)で設定用GUIが提供されている というか設定手段はそれだけなので自動化する際には難がある 詳しくは「JMeterをWebでしか設定できないサーバの設定自動化に使 う」(福岡Javaツール勉強会資料)へ http://www.slideshare.net/takayukikando/jmeterweb Javaで書かれている LinuxでもWindowsでも(未確認だけど多分Macでも)動く Javaでサーバ機能を拡張するサーバ・コンポーネント作成可能 Windows版はインストーラ(.exe)あり .rpm(Linux)、.deb(Debian)、.dmg(Mac)もある
7.
インストール後入力を求められること 2016/04/03第13回福岡市西区プログラム勉強会7 localhostの9090ポートにWebブラウザでアクセスすると管理 画面(初回は初期設定画面) Windowsでは起動ダイアログにあるLaunch
Adminボタンでも可 サーバ名(サーバのDNS名) Windows環境でDNS名割り当てなしの場合、localhostからテスト に使うだけであればはホスト名と同じにしておいても動く 以下の設定画面例はWindowsでホスト名と同じ"ostrich"と設定した場 合 管理者IDとパスワード 管理者ID(JIDの"@"の左側)とパスワードを決めておく スキップした場合はユーザ名"admin"、パスワード"admin"となる RDBの指定 内蔵(Embedded)の簡易DBを使う設定もあり 今回はlocalhostでテストに使いたいだけなのでこちらを選択 標準的にはPostgrsSQLを利用 インストーラーが入れてくれます
8.
インストール後のログイン 2016/04/03第13回福岡市西区プログラム勉強会8 管理者のパスワードはインストール時に設定した物 スキップしてしまった場合
デフォルト管理者のユーザ名"admin"、パスワード:"admin" ユーザ作成後はそのユーザ名とパスワードでログイン可 ユーザ名はJabbar IDの"@"より前の部分
9.
ログイン後トップ画面 2016/04/03第13回福岡市西区プログラム勉強会9 Openfireの 最新版は 4.0.2 このスク リーンショッ トは3.7.0
今回操作 する部分は 変更なし
10.
データベース設定の確認 2016/04/03第13回福岡市西区プログラム勉強会10 "Database"を選 ぶとこの画面に なる "embedded-db"になっていれば組 み込み簡易DBが使われている
11.
XMPPユーザアカウント作成 2016/04/03第13回福岡市西区プログラム勉強会11
12.
ユーザ登録前のおさらい: XMPPのID(Jabber ID、JID) ユーザ・アカウント、ユーザが利用する個々の接続、サーバ、サー バの拡張機能といったものを一意に識別する名前
メッセージなどを配信する際に宛先として使用する 連絡先リストの識別子(ID)でもある このようにユーザはクライアントの接続毎に識別できるため複数個所 からの接続が可能 一般形は: <ユーザ名>@<サービス名>/<リソース名> 例: xmpp.xgmtk.orgというDNS名のXMPPサーバ: xmpp.xgmtk.org 上記サーバのユーザkando: kando@xmpp.xgmtk.org 上記ユーザkandoが使うクライアント(リソース名client )からの接続: kando@xmpp.xgmtk.org/client 上記サーバの拡張コンポーネントchatroom: chatroom.xmpp.xgmtk.org 名称はXMPPがかつてJabberと呼ばれていたことによる 2016/04/0312 第13回福岡市西区プログラム勉強会
13.
新規ユーザ作成 2016/04/03第13回福岡市西区プログラム勉強会13 テストに利用するアカウントを作成 少なくとも1つあれば主だったクライアント機能のテストはできる
が、2つほど作っておくと分かり易いと思う ユーザ名。Jabber IDの"@"より左 側の部分。使える文字はメールの ユーザ名と同じ ニックネーム。任意の文字列。 省略可。 メールアドレス。省略可。 パスワード。XMPPログイン 時とWebUIのログインで共通 パスワード確認。パスワード と同じ文字列。 管理権限のある アカウントを作る 時にチェック "Create New User"を選ぶとこ の画面になる "User/Groups"の"Users"タブを選ぶ とユーザ管理画面
14.
ユーザ登録後のユーザ一覧(User Summary) 2016/04/03第13回福岡市西区プログラム勉強会14 テスト用のユーザのRoster(連絡先リスト)を編集して相互に連 絡可能(Both)なように登録する
連絡先リストに関する操作をクライアントで行う場合は不要 今回のサンプルコードではその辺りは省いているので必要 編集するユーザの Editアイコンをクリック
15.
例:ユーザemiri.kの連絡先一覧 2016/04/03第13回福岡市西区プログラム勉強会15 3. Editアイコンをクリックすると表 示される属性ダイアログで subscriptionを編集してBoth にしておく 2. "Add
New Item"でRosterにエ ントリを追加しておく 1. "User Options"の "Roster"を選ぶと この画面になる ※ 連絡先リストには別 サーバのJabber IDも 登録されるのでサーバ 名も含める
16.
オマケ: Spark 2016/04/03第13回福岡市西区プログラム勉強会16 Openfireの提供元が提供するXMPPクライアント
Javaで書かれている 名前の似ているSparkWebはWebページ組み込み用のクライ アント 配布元: ignite realtime社、オープンソース 2016年4月2日現在の最新版は2.7.6 http://www.igniterealtime.org/projects/spark/index.jsp Windows版はインストーラ(.exe)あり .rpm(Linux)、.deb(Debian)、.dmg(Mac)もある クライアント・プログラミングに必須ではないがサーバの 動作を確認したい時など、比較用にあると便利
17.
Smack APIライブラリの インストール 2016/04/03第13回福岡市西区プログラム勉強会17
18.
クライアント用ライブラリSmack API 2016/04/03第13回福岡市西区プログラム勉強会18 配布元:
ignite realtime社、オープンソース 2016年4月2日現在の最新版は4.1.6 http://www.igniterealtime.org/projects/smack/index.jsp DL http://www.igniterealtime.org/downloads/download- landing.jsp?file=smack/smack_4_1_6.zip http://www.igniterealtime.org/downloads/download- landing.jsp?file=smack/smack_4_1_6.tar.gz Javaで書かれたクライアント用ライブラリ 一通りの機能は揃っている 自分で拡張機能の実装でもしない限りは、XMLパーサを呼んでXML 要素をパース&生成する必要はない Java 7 SE以上、Java 8 SEでも動く
19.
Smack APIのインストール 2016/04/03第13回福岡市西区プログラム勉強会19 環境に応じて.zipか.tar.gzファイルをダウンロード&展開
必要な.jarファイルにクラスパスを通す smack-core.jar …コア部分 smack-extensions.jar …拡張部分 smack-debug.jar …デバッグ用拡張 Smack APIをソースからコンパイルする場合 GradleやMavenを依存の自動解決をしないならばXml Pull Parser(詳細は付録に)のインストールが必要 Xml Pull Parser: http://www.xmlpull.org/
20.
サンプル・プログラム EchoBot 2016/04/03第13回福岡市西区プログラム勉強会20
21.
XMPP/Smack APIプログラミングの基本 2016/04/03第13回福岡市西区プログラム勉強会21 XMPPのポリシ
複雑な機能はサーバ側で実装 クライアントはUIの提供に徹する サービスの類は本当はボットとか作らずにサーバコンポーネントにする のが望ましい 今回はサンプルなのでUIを省いてメッセージ処理に集中するためボット を作成 Smack APIの基本 接続を表すXMPPConnectionオブジェクトが中心 コネクションに紐づけられた各種マネージャを介してXMPPの実装にア クセスする 基本はリスナ登録を通じたイベント・ドリブンなプログラミング 一応、フィルタとコレクタを使って着信を待つスタイルもあります タイムアウトが実現できるので返信を待つような場合に使われる プロトコル実装上、返信を待つ必要がある際に良く使われる 今回は利用しなかった
22.
EchoBot 2016/04/03第13回福岡市西区プログラム勉強会22 仕様 自動クライアント
ログイン情報はプロパティファイルresource/echo.propertiesで与え る 標準入力から"quitn"が入力されると終了 ボットのプレゼンス情報(時間表示付き)を30秒ごとに更新 メッセージを送ると同文を返信する 一度メッセージを送られるとその相手へ5分毎の時報を送信 ソース Gist "EchoBot.java": https://gist.github.com/TakayukiKando/ca0c72a07bcdd04f 7a55595895ea296d
23.
EchoBot動作例 2016/04/03第13回福岡市西区プログラム勉強会23 私の手製のXMPPクライアントから見た例 ← プレゼンス 表示画面 → 会話画面
24.
EchoBotのプロジェクト構成と EchoBotクラスの構造 2016/04/03第13回福岡市西区プログラム勉強会24 下:プロジェクトの構成 パッケージ構造とecho.properties、 参照ライブラリに注目
右:クラスの構造
25.
main() 2016/04/03第13回福岡市西区プログラム勉強会25 メインスレッドを待機させる ログインに必要な情報を 取得する メッセージ処理本体 ここではサボってますが終了前にconnectionのdisconnect()メソッドを呼んで接続 を切断しましょう
26.
loadSettings() 2016/04/03第13回福岡市西区プログラム勉強会26 プロパティを読み込む何時ものアレ
27.
EchoBotコンストラクタ 2016/04/03第13回福岡市西区プログラム勉強会27 XMPPConnectionクラスのオブジェクトがクライアント・プログラミングの中心 基本機能はconn.getAAAManager()、拡張機能はXXX.getXXXManager(cconn)で各 機能のマネージャーを取得してそれを操作することで実現できる
マネージャーはコネクションと紐づけられているので何度取得しても基本的に同じオブ ジェクトが返る 保存しておかなくてもいい 接続~ログイン デバッグモー ド指定(opt.) 自身をチャッ トメッセージ のリスナとし て登録 時報機能開 始 Presence更 新開始 chatセッションを 保持するリスト newする時に参 照される リソース名に自身のクラス名を利 用(同一アドレスから一個しか接 続できない)
28.
ChatListenerとしてのメソッド 2016/04/03第13回福岡市西区プログラム勉強会28 1対1のチャットセッションが開始された際に呼ばれる 引数
Chatオブジェクトはセッションを表す createdLocally引数は自身が開始したセッションである時にtrue 動作 自身をメッセージリスナとしてChatオブジェクトに登録 時報発信のためのリストに登録
29.
MessageListenerとしてのメソッド (エコー機能の実現) 2016/04/03第13回福岡市西区プログラム勉強会29 セッションでメッセージが着信した際に呼ばれる 引数
Chatオブジェクトはメッセージが届いたセッションを示す Messageオブジェクトはメッセージ XMPPのMessageスタンザを表すオブジェクト 送信者(From)はXMPPサーバが付けるのでクライアントによる詐称はできない クライアントが付けて送っても上書きされる 宛先(To)、送信者とタイムスタンプ、本文以外に付加的なフィールドが幾つかある スレッド識別子とかムード情報とか、言語情報とか、……、etc. 送信者を取り出 す 送信者へメッセージを送り返す getBody()でメッセージ本文が取れる のでそれを渡してオウム返しさせてい る エラーはログを 吐いて黙殺
30.
setTimeSignal() (時報機能の実現) 2016/04/03第13回福岡市西区プログラム勉強会30 引数intervalは時報間隔のミリ秒 EchoBotのstaticなタイマー(TIMER)のscheduleAtFixedRate()で 開始時刻と時間間隔を指定して一定時間ごとにTimerTaskを実行 させる
TimerTask内では現在時刻を取得、フォーマットして sendMessageToAll()を呼び出す 時報開始時刻の設定。 切りのいい時刻になるよう、現在時刻から 分、秒、ミリ秒を0に設定。
31.
sendMessageToAll() (リストに記録された全セッションへの同報) 2016/04/03第13回福岡市西区プログラム勉強会31 ChatListenerのメソッドでリストに記録しておいた全セッ ションへの同一メッセージの送信(同報)
32.
setPresenceUpdater() (Presence更新機能の実現) 2016/04/03第13回福岡市西区プログラム勉強会32 引数intervalはPresence更新間隔のミリ秒 EchoBotのstaticなタイマー(TIMER)の scheduleAtFixedRate()で開始時刻(現在)と時間間隔 を指定して一定時間ごとにTimerTaskを実行させる
TimerTask内では現在時刻を取得、フォーマットして sendPresence()を呼び出す
33.
sendPresence() (Presenceの送信) 2016/04/03第13回福岡市西区プログラム勉強会33 引数statusはPresenceに表示する任意のテキスト 現況を簡潔に表す短文
PresenceはXMPPのPresenceスタンザを表すオブジェクト Typeは通常の状態の表示に使うのはavailable(接続中), unavailable(非接 続)の2種 残りのsubscribe, subscribed, unsubscribe, unsubscribed, errorは連絡先リストへの 登録、解除のプロトコルに利用される。 Modeはchat(会話歓迎), available(接続している), away(離席中), xa(長 時間の離席), dnd(Don't disturb.忙しい)の5種類 Messageスタンザと同じく付加的なフィールドが幾つかある Presenceスタンザは連絡先リスト全体に送られるのでできるだけ小さく するのが望ましい
34.
まとめ XMPP/Smack APIプログラミング 2016/04/03第13回福岡市西区プログラム勉強会34 XMPPのポリシ
複雑な機能はサーバ側で実装 クライアントはUIの提供に徹する サービスの類は本当はボットとか作らずにサーバコンポーネントにする のが望ましい 今回はサンプルなのでUIを省いてメッセージ処理に集中するためボット を作成 Smack APIの基本 接続を表すXMPPConnectionオブジェクトが中心 コネクションに紐づけられた各種マネージャを介してXMPPの実装にア クセスする 基本はリスナ登録を通じたイベント・ドリブンなプログラミング 一応、フィルタとコレクタを使って着信を待つスタイルもあります タイムアウトが実現できるので返信を待つような場合に使われる プロトコル実装上、返信を待つ必要がある際に良く使われる 今回は利用しなかった
35.
付録 2016/04/03第13回福岡市西区プログラム勉強会35
36.
XML Pull Parserについて
Xml Pull Parser http://www.xmlpull.org/ 実装例 kXML Web: http://www.kxml.org/ SourceForge(JARファイル): https://sourceforge.net/projects/kxml/ MXP1(Smackが使っているが、ダウンロードURLがリンク切 れ) http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/ 2016/04/0336 第13回福岡市西区プログラム勉強会
Download now