/*
 * Copyright (c) 2009 The openGion Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package org.opengion.hayabusa.html;

import javax.websocket.*;
import java.net.*;

/**
 * DBTableModelの表示を行うインターフェースです。
 * 各種の表示形式をサポートするには、ViewMarker インターフェースを implements した
 * クラスを作成して、DBTableModel をセットするだけです。
 * ViewMarker 自体は,Controller クラスよりアクセスされます。
 *
 * ViewMarker の実装クラス( implements されたクラス)に対する 各種設定(たとえば、HTMLタグなど)
 * は、個々の実装クラス毎に設定します。
 *
 * @og.group 画面表示
 *
 * @version  4.0
 * @author   Kazuhiko Hasegawa
 * @since    JDK5.0,
 */
@ClientEndpoint
public class WebSocketTest {
	static boolean connected = false;

	/**
	 * エラーメソッド。
	 * 
	 * @param session セッション
	 * @param cause エラー発生元オブジェクト
	 */
	@OnError
	public void onError( final Session session, final Throwable cause ) {
		// エラー
		System.out.println("error : " + session.getId() + ", " + cause.getMessage());
	}

	/**
	 * メッセージメソッド。
	 * 
	 * @param msg メッセージ
	 * @param session セッション
	 */
	@OnMessage
	public void onMessage( final String msg, final Session session ) {
		// 文字列を受け取る
		System.out.println("onMessage: " + msg);
	}	

	/**
	 * クロースメソッド。
	 * 
	 * @param session セッション
	 * @param closeReason CloseReasonオブジェクト
	 */
	@OnClose
	public void onClose( final Session session, final CloseReason closeReason ) {
		// 接続が閉じられた
		System.out.println("closed");
		connected = false;
	}

	/**
	 * オープンメソッド。
	 * 
	 * @param session セッション
	 */
	@OnOpen
	public void onOpen( final Session session ) {
		// 接続した
		System.out.println("opened");
	}

	/**
	 * メインメソッド。
	 * 
	 * @param args 引数配列
	 */
	public static void main( final String[] args ) {
		final WebSocketContainer container = ContainerProvider.getWebSocketContainer();
		final Class<?> cls = WebSocketTest.class;

		// 接続 ws://localhost:8826/gf/wsdemo
		try (Session session = container.connectToServer( cls, URI.create( args[0]) ) ) {
			connected = true;

			while( connected ) {
				// 接続中

				// 文字列を送る
				session.getBasicRemote().sendText("message");
	 
//				(その他送信側の処理いろいろ)
			}
		} catch( final Exception ex ) {
			System.err.println( ex );
		}
	}
}
