第4回:実機に載せよう(ダウンサイズ)
001: //package com.s_cradle.improve.client;
002:
003: import java.io.*;
004: //import com.s_cradle.improve.Constants;
005: import java.util.*;
006: import javax.microedition.lcdui.Canvas;
007: import javax.microedition.lcdui.Displayable;
008:
009: /**
010: * Copyright (C) 2003 Sophia Cradle, Inc.
011: *
012: * オペレーション polling を使ったタスクを行うクラスです。
013: *
014: * @author Masaru Yoshimura
015: */
016: public class N/*PollingTask*/ extends Z/*Task*/{
017: //downsize 定数展開
018: /*
019: private static final String TICKERMESSAGE_ATTACKED = "から攻撃されました!";
020: private static final String MESSAGE_ATTACKED = "攻撃されました。";
021: */
022:
023: private Vector[] StackMap/*vectors*/ = new Vector[2];
024:
025: //private Vector newList;
026: //private Vector messages;
027:
028: private static final String[] Code/*ITEMS*/ = new String[]{
029: "account"/*Constants.PARAMETER_ACCOUNT*/, "password"/*
Constants.PARAMETER_PASSWORD*/};
030:
031: /**
032: * コンストラクタ。タスクで使う値(アカウント,パスワード)を引数にとる。
033: */
034: public N/*PollingTask*/(String[] strs1) {
035: StackMap/*initializeTask*//*super*/(6/*TASK_POLLING*/,Code/*
ITEMS*/,new String[]{D/*strs*/[0]/*account*/,D/*strs*/[1]/*password*/});
036: StackMap/*vectors*/[0]/*newList*/ = new Vector();
037: StackMap/*vectors*/[1]/*messages*/ = new Vector();
038: }
039:
040: /**
041: * 失敗時の処理
042: */
043: protected void Z/*processFailed*/() {
044: }
045:
046: /**
047: * 返値を読んだ後の処理
048: */
049: protected void Code/*processAfterReturnValue*/(
int result, DataInputStream input) throws java.io.IOException {
050: Vector oldList = I/*ImproveMIDlet*/.Code/*buddyList*/;
051:
052: short userNumber = (short)(result >> 16);
053: short messageNumber = (short)result;
054:
055: //downsize アルゴリズム
056: if(userNumber > 0){
057: A/*Buddy*/ buddy = new A/*Buddy*/(input);
058: buddy.Code/*idata*/[1]/*attribute*/ = 0/*Buddy.ATTRIBUTE_HIM*/;
059: StackMap/*vectors*/[0]/*newList*/.addElement(buddy);
060: }
061: for (short i=1; i<userNumber; i++) {
062: StackMap/*vectors*/[0]/*newList*/.addElement(new A/*Buddy*/(input));
063: }
064:
065: for (short i=0; i<messageNumber; i++) {
066: StackMap/*vectors*/[1]/*messages*/.addElement(new K/*Message*/(input));
067: }
068:
069: I/*ImproveMIDlet*/.I/*callSerially*/(new Runnable(){
070: public void run(){
071: Vector oldList = I/*ImproveMIDlet*/.Code/*buddyList*/;
072: Vector buddyList = new Vector();
073: Hashtable hush = new Hashtable();
074:
075: for(Enumeration e=StackMap/*vectors*/[0]/*
newList*/.elements();e.hasMoreElements();){
076: A/*Buddy*/ newBuddy = (A/*Buddy*/)e.nextElement();
077: if( oldList.indexOf(newBuddy) >= 0 ){
078: A/*Buddy*/ oldBuddy = (
A/*Buddy*/)oldList.elementAt(oldList.indexOf(newBuddy));
079: oldBuddy.StackMap/*update*/(newBuddy);
080: buddyList.addElement(oldBuddy);
081: hush.put(oldBuddy.StackMap/*etc*/[0]/*account*/,oldBuddy);
082: } else{
083: buddyList.addElement(newBuddy);
084: hush.put(newBuddy.StackMap/*etc*/[0]/*account*/,newBuddy);
085: }
086: }
087:
088: for(Enumeration e=StackMap/*vectors*/[1]/*
messages*/.elements();e.hasMoreElements();){
089: K/*Message*/ m = (K/*Message*/)e.nextElement();
090: A/*Buddy*/ buddy = (
A/*Buddy*/)hush.get(m.Code/*strs2*/[0]/*account*/);
091:
092: //downsize アルゴリズム
093: if(buddy != null){
094: if(buddy.L/*messageBox*/ == null){
095: new M/*MessagingCanvas*/(buddy);
096: }
097: if( m.StackMap/*idata1*/[1]/*from*/ == 0/*m.FROM_ME*/){
098: buddy.L/*messageBox*/.Code/*addMessage*/(
m.Code/*strs2*/[1]/*content*/,8/*MessageBox.MESSAGE_MINE*/);
099: } else if(
m.StackMap/*idata1*/[1]/*from*/ == 1/*m.FROM_OTHER*/){
100: if(
m.StackMap/*idata1*/[0]/*type*/ == 1/*Constants.MESSAGE_TYPE_NORMAL*/){
101: buddy.L/*messageBox*/.Code/*addMessage*/(
m.Code/*strs2*/[1]/*content*/,9/*MessageBox.MESSAGE_OTHER*/);
102: } else if(
m.StackMap/*idata1*/[0]/*type*/ == 2/*Constants.MESSAGE_TYPE_ATTACK*/){
103: I/*ImproveMIDlet*/.StackMap/*
listCanvas*/.I/*ticker*/.Code/*insert*/(
1/*Ticker.LEVEL_NORMAL*/,m.Code/*strs2*/[0]/*
account*/+"から攻撃されました!"/*TICKERMESSAGE_ATTACKED*/);
104: buddy.L/*messageBox*/.Code/*addMessage*/(
"攻撃されました。"/*MESSAGE_ATTACKED*/,9/*MessageBox.MESSAGE_OTHER*/);
105: }
106: }
107: }
108: }
109:
110: I/*ImproveMIDlet*/.Code/*buddyList*/ = buddyList;
111: Displayable d = I/*ImproveMIDlet*/.StackMap/*getCurrent*/();
112: if( d instanceof Canvas ){
113: ((Canvas)d).repaint();
114: }
115: StackMap/*vectors*/[0]/*newList*/ = new Vector();
116: StackMap/*vectors*/[1]/*messages*/ = new Vector();
117: }
118: });
119: }
120:
121: /**
122: * 自分の投げたメッセージを追加する。
123: */
124: public void Code/*addOwnMessage*/(String target,String content){
125: StackMap/*vectors*/[1]/*messages*/.addElement(
new K/*Message*/(target,content));
126: }
127: }