|
// PC Watch dog watch // // 効果: PC Watchを監視し、更新されていた場合、ユーザーに知らせます。 // (更新から最大1時間15分以内) // // Usage: ダウンロードし、iアプリに登録。 // ネットワークには確認なしで接続するように設定してください。 // 一時機能を止めておきたい場合はiアプリメニューから // 「タイマー動作を許可しない」設定にしてください。 // (あるいはiアプリメニューから削除してしまうか) import com.nttdocomo.ui.*; import com.nttdocomo.util.*; import java.util.Random; import java.io.*; import javax.microedition.io.*; import com.nttdocomo.io.*; //-- PcDogのメインクラス public class PcDog extends IApplication { private PcDogCanvas canvas; public void start(){ canvas=new PcDogCanvas(this); Display.setCurrent(canvas); } } //-- PcDogCanvasクラス class PcDogCanvas extends Canvas implements TimerListener{ //-- このクラスで使う変数の定義 private IApplication application; String szMes1,szMes2; String url; int loop; private AudioPresenter[] audio;//オーディオプレゼンタ(効果音用) private MediaSound sound; InputStream in; OutputStream out; int currentvalue,storedvalue;//現在と過去のWebPageのバイト数 int resultcode = 0;//Webサーバーからのレスポンスコードが入る boolean isPageModified = false;//Web Pageが更新されたかが入るフラグ private Timer timer;//自動終了用のタイマ //-- コンストラクタ public PcDogCanvas(IApplication application) { this.application=application; szMes1 = "PC Watch"; szMes2 = "更新されていません"; url = application.getSourceURL() + "pcdog.txt"; //-- オーディオ周りの初期設定 try { audio = new AudioPresenter[1000]; sound = MediaManager.getSound("resource:///PcDog.mld"); sound.use(); audio[1] = AudioPresenter.getAudioPresenter(); audio[1].setSound(sound); } catch(ConnectionException e){ } //サーバーとスクラッチパッドから値を取る currentvalue = getDogBytes(url); storedvalue = readPadValue(); //過去の値と現在の値が違ったいたらフラグを立てる if(storedvalue != -1){ if(currentvalue != storedvalue){ isPageModified = true; } } //もしサーバーからの回答があったなら //スクラッチパッドに値を入れる if(currentvalue != -1){ writeCurrentvalue(currentvalue); } //ソフトキーのラベルを設定 setSoftLabel(Frame.SOFT_KEY_2, "終了"); szMes1 = "PC Watch"; if(isPageModified == true){ //更新されていたらメッセージを設定 szMes2="が更新されました。"; //効果音を鳴らす audio[1].play(); //タイマの設定 timer=new Timer(); timer.setTime(60000); timer.setListener(this); timer.start(); }else{ //更新されていなければ終了 szMes2="は更新されていません"; application.terminate(); } } //実行より60秒経過 … プログラムを終了 public void timerExpired(Timer source) { application.terminate(); } // [イベント] ソフトキーが押された public void processEvent(int type,int param){ if ((type==Display.KEY_PRESSED_EVENT) && (param==Display.KEY_SOFT2)){ application.terminate(); } } // paint メソッド public void paint(Graphics g) { Font font; int maxX=getWidth(); int maxY=getHeight(); font=Font.getDefaultFont(); g.setColor(g.getColorOfName(Graphics.WHITE)); g.fillRect(0,maxY/2-font.getHeight(), maxX,font.getHeight()*3); g.setColor(g.getColorOfName(Graphics.BLACK)); g.drawString(szMes1, getWidth ()/2-font.stringWidth(szMes1)/2, getHeight()/2-font.getHeight()/2+font.getAscent()); g.drawString(szMes2, getWidth ()/2-font.stringWidth(szMes2)/2, getHeight()/2+font.getHeight()/2+font.getAscent()); } //--スクラッチパッドの値を見る private int readPadValue() { try{ DataInputStream in = Connector.openDataInputStream("scratchpad:///0"); // データを読み取る。 int result; result = in.read() <<16; result |= (in.read() <<8); result |= in.read() ; // 入力ストリームをクローズする。 in.close(); return result; } catch(IOException e) { // ScratchPad 入出力の例外処理 return 0; } } //--スクラッチパッドに新しい値を書く private void writeCurrentvalue(int n) { try{ OutputStream out = Connector.openOutputStream("scratchpad:///0"); out.write((n>>16) & 0xff); out.write((n>>8) & 0xff); out.write(n & 0xff); out.close(); }catch(IOException e) { // ScratchPad 入出力の例外処理 } } //-- インターネットコネクションでデータを引き出す private int getDogBytes(String url) { try { // 接続を設定する HttpConnection conn = (HttpConnection)Connector.open( url, Connector.READ, true); // 要求メソッドとコンテンツタイプを設定する。 conn.setRequestMethod(HttpConnection.GET); conn.setRequestProperty("Content-Type","text/plain"); conn.connect(); resultcode = conn.getResponseCode(); int result=0; // 入力ストリームを取り出す。 InputStream in = conn.openInputStream(); if (in == null) throw new IOException(); // データを読み取る。 int i; result = 0; result += (in.read() - 48); result *= 10; result += (in.read() - 48); result *= 10; result += (in.read() - 48); result *= 10; result += (in.read() - 48); result *= 10; result += (in.read() - 48); // 入力ストリームをクローズする。 in.close(); // http 接続をクローズする。 conn.close(); return result; } catch (Exception x) { return -1; } } } |
(2001年2月23日)
[Text by 大和哲]