Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept

Similar documents
Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

エンドポイント WebSocket API ではクライアント サーバともに javax.websocket.endpoint クラスから派生してエンドポイントのクラスを定義します そして onopen() onclose() および onerror() をオーバーライドし それぞれ接続時 切断時およ

Java演習(4) -- 変数と型 --

新・明解Java入門

K227 Java 2


Microsoft PowerPoint - Lecture_2

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

オブジェクト指向プログラミング・同演習 5月21日演習課題

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

r1.dvi


解きながら学ぶJava入門編

IE6 2 BMI chapter1 Java 6 chapter2 Java 7 chapter3 for if 8 chapter4 : BMI 9 chapter5 Java GUI 10 chapter6 11 chapter7 BMI 12 chap

SpringSecurity

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

: : : TSTank 2

JavaプログラミングⅠ

Microsoft PowerPoint - Lecture_3

JAVA 11.4 PrintWriter 11.5

Part1 159 a a

文字列操作と正規表現

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

Prog2_9th

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

JavaプログラミングⅠ

オブジェクト脳のつくり方

untitled

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2

226

2

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Exam : 1z0-809 日本語 (JPN) Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO 1 / 8 Get Latest & Valid 1z0-809-JPN Exam's Question and Answe

B2-Servlet-0112.PDF


アルゴリズムとデータ構造1

ex01.dvi

インターネットマガジン2001年4月号―INTERNET magazine No.75

H8.6 P


PowerPoint Presentation


1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

コーディング基準.PDF

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

2

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

r02.dvi

メディプロ1 Javaサーブレット補足資料.ppt

アルゴリズムとデータ構造1

明解Javaによるアルゴリズムとデータ構造

--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

WTM2019SingleSignOn

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Transcription:

@OnMessage public void handlecounter(int newvalue) {... @OnMessage public void handleboolean(boolean b) {... public void sendobject(object message) throws IOException, EncodeException

Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeException public String encode(foo foo) throws EncodeException String FooDecoder Foo String FooEncoder Foo RemoteEndpoint Endpoint

@OnMessage public void handlemessageasstream( InputStream messagestream, Session session) { // read from the messagestream // until you have consumed the // whole binary message @OnMessage public void handlemessageinchunks( String chunk, boolean islast) { // reconstitute the message // from the chunks as they arrive public Writer getsendwriter() throws IOException public OutputStream getsendstream() throws IOException

public void sendtext( String partialtextmessage, boolean islast) throws IOException public Future<Void> sendtext( String textmessage) public void sentbinary( ByteBuffer partialbinarymessage, boolean islast) throws IOException public void sendtext( String textmessage, SendHandler handler)

<ws or wss>://<hostname>:<port>/ <web-app-context-path>/<websocket-path>? <query-string> /airlines/{service-class /airlines/coach /airlines/first /airlines/business /airlines/{service-class @ServerEndpoint("/air1ines/{service-class") public class MyBookingNotifier { @OnOpen public void initializeupdates(session session, @PathParam("service-class") String sclass) { if {"first".equals(sclass)) { // open champagne else if ("business".equals(sc1ass)) { // heated nuts else { // don't bang your head on our aircraft...

@ServerEndpoint("/travel/hotels/{stars") public class HotelBookingService { public void handleconnection{ Session s, EndpointConfig config) { String mypath = ((ServerEndpointConfig) config).getpath(); // mypath is "/travel/hotels/{stars"... Session.getRequestURI() ws://fun.org/customer/services/ travel/hotels/3 /customer/services/travel/hotels/3 <ws or wss>://<host:name>:<port:>/ <web-app-context-path>/<websocket-path>? <query-string> <form name="input" action="form-processor" method="get"> Your Username: <input type="text" name="user"> <input type="submit" value="submit"> </form>

/form-processor?user=jared public String getquerystring() public Map<String,List<String>> getrequest:parametermap() ws://fun.org/customer/ services/travel/hotels/4? showpics=thumbnails& description=short @ServerEndpoint("/travel/hotels/{stars") public class HotelBookingService2 { public void handleconnection( Session session, EndpointConfig config) { String picturetype = session.getrequestparametermap().get("showpics").get(0); String textmode = session.getrequestparametermap().get("description").get(0);......

import java.util.arraylist; import java.util.list; import javax.websocket.*; public class Transcript { private List<String> messages = new ArrayList<>(); private List<String> usernames = new ArrayList<>(); private int maxlines; private static String TRANSCRIPT_ATTRIBUTE_NAME = "CHAT_TRANSCRIPT_AN"; public static Transcript gettranscript(endpointconfig ec) { if (!ec.getuserproperties(). containskey(transcript_attribute_name)) { ec.getuserproperties().put(transcript_attribute_name, new Transcript(20)); return (Transcript) c.getuserproperties().get(transcript_attribute_name); Transcript(int maxlines) { this.maxlines = maxlines; public String getlastusername() { return usernames.get(usernames.size() -1); public String getlastmessage() { return messages.get(messages.size() -1);

public void addentry( string username, String message) { if (usernames.size() > maxlines) { usernames.remove(0); messages.remove(0); usernames.add(username); messages.add(message); private void broadcasttranscriptupdate() { for (Session nextsession : session.getopensessions()) { ChatUpdateMessage cdm = new ChatUpdateMessage( this.transcript.getlastusername(), this.transcript.getlastmessage()); try{ nextsession.getbasicremote(.sendobject(cdm; catch (IOException EncodeException ex) { System.out.println( "Error updating a client : " + ex.getmessage());

import java.util.iterator; import javax.websocket.encodeexception; import javax.websocket.encoder; import javax.websocket.endpointconfig; public class ChatEncoder implements Encoder.Text<ChatMessage> { public static final String SEPARATOR = ":"; @Override public void init(endpointconfig config) { @Override public void destroy() { @Override public String encode(chatmessage cm) throws EncodeException { if (cm instanceof StructuredMessage) { String datastring = ""; for (Iterator itr = ((StructuredMessage) cm).getlist().iterator(); itr.hasnext(); ) { datastring = datastring + SEPARATDR + itr.next(); return cm.gettype() + datastring; else if (cm instanceof BasicMessage) { return cm.gettype() + ((BasicMessage) cm).getdata(); else { throw new EncodeException(cm, "Cannot encode messages of type: " + cm.getc1ass());

//web apps / ノテーションを付加したendChatChannel()メソッドが 別れの挨拶なし でチャット ルームから退室したユーザーがいることを通知するメッセー ジを すべての接続クライアントにブロードキャストします チャット画面 のスクリーンショットを見返すと JessとRobではチャット ルームからの退 室の仕方に違いがあることを確認できます まとめ 2回に分けてお届けした本記事では Java WebSocketエンドポイントの 作成方法を学習しました WebSocketプロトコルの基本的な概念と サー バーからのプッシュを必要とする状況について考察し Java WebSocket エンドポイントのライフサイクル Java WebSocket APIの主なクラス エンコード処理およびデコード処理の手法を確認しました また Java WebSocket APIでサポートされる各種のメッセージング モードに注目 しました サーバー エンドポイントをWebアプリケーションのURI空間 にマップする方法と その中にあるエンドポイントにクライアント リクエ ストをマッチングする方法についても学習しました 最後に 多数のJava WebSocket API機能を使用するチャット アプリケーションについて考察 しました 今回学んだ知識を使うことで 長期存続型コネクションを使用 したアプリケーションを簡単に構築できます </article> 本記事は 書籍 Java EE 7: The Big Picture の内容を 発行者のOracle Pressの許可を得て改訂したものです Danny Coward Liquid Robotics のプリンシパル ソフトウェア エンジニ ア 以前はオラクル およびその前のSun Microsystems でJava開発チー ムに属し 特にWebSocketに関する業務に従事した learn more オラクルのJava WebSocketチュートリアル Long polling, a WebSocket alternative 34 ORACLE.COM/JAVAMAGAZINE ///////////////////// JANUARY/FEBRUARY 2016