📄 chatsession.java
字号:
import java.util.Enumeration;
import java.util.Vector;
import javax.microedition.lcdui.*;
public class ChatSession implements CommandListener
{
public static final Command CMD_INVITE_MORE = new Command("邀请多人", 4, 1);
public static final int MAX_COUNT = 10;
public static int objCounter = 0;
public static Vector unReadQueue = new Vector();
public static int total_UnReadMessageCount = 0;
public static final int MAX_MESSAGE_COUNT = 30;
public int unReadMessageCount;
private String sessionName;
public Vector uris;
public Vector messages;
private Form form;
private Ticker ticker;
public byte state;
public Object key;
private Vector willRemoveCommands;
public MListItem item;
public ChatSession(String s, Vector vector)
{
unReadMessageCount = 0;
state = 0;
key = null;
willRemoveCommands = null;
sessionName = s;
if(sessionName != null && sessionName.length() != 0)
state = 2;
messages = new Vector(2);
uris = vector;
if(uris.size() > 1)
{
ticker = new Ticker(getAllUriString(uris));
form = new Form(ticker.getString());
form.setTicker(ticker);
key = s;
} else
{
form = new Form(getAllUriString(uris));
key = vector.elementAt(0);
}
form.setCommandListener(this);
willRemoveCommands = new Vector();
addWillRemoveCommands(Setting.cmd_WriteMessage);
form.addCommand(Setting.cmd_Back);
form.addCommand(Setting.cmd_Close);
objCounter++;
}
private void addWillRemoveCommands(Command command)
{
if(!willRemoveCommands.contains(command))
{
willRemoveCommands.addElement(command);
form.addCommand(command);
}
}
private void reAddWillRemoveCommands()
{
Enumeration enumeration = willRemoveCommands.elements();
while (enumeration.hasMoreElements()) {
form.addCommand((Command) enumeration.nextElement());
}
}
public void show(Display display)
{
MMIDlet.instance.selectedChatSession = this;
MMIDlet.selectedItem = item;
total_UnReadMessageCount -= unReadMessageCount;
unReadMessageCount = 0;
unReadQueue.removeElement(this);
MMIDlet.instance.pushBackScreen(MMIDlet.canvas);
display.setCurrentItem(form.get(0));
}
public boolean containBuddy(Buddy buddy)
{
return uris == null ? false : uris.contains(buddy.uri);
}
public String getTitle()
{
return form.getTitle();
}
public void update(String s, Vector vector, Vector vector1)
{
state = 2;
sessionName = s;
if(vector == null)
{
if(uris.size() > 1)
{
uris = null;
removeUnuseCommand();
} else
{
sessionName = null;
}
} else
if(uris.size() == 1 && vector.size() > 1)
{
String s1 = getAllUriString(vector);
if(ticker == null)
ticker = new Ticker(s1);
form.setTitle(s1);
form.setTicker(ticker);
Object obj = key;
key = sessionName;
uris = vector;
MMIDlet.instance.changeChatSessionKey(obj, key);
} else
if(uris.size() > 1 && vector.size() == 1)
{
form.setTitle(getAllUriString(vector));
key = vector.firstElement();
uris = vector;
if(MMIDlet.instance.isBlock(key.toString()))
{
form.insert(0, new StringItem("", MMIDlet.instance.getNickNameByUri(key.toString()) + "被加入黑名单,会话不能继续进行。\n"));
removeUnuseCommand();
} else
{
form.setTicker(null);
ticker = null;
MMIDlet.instance.changeChatSessionKey(sessionName, key);
}
}
if(vector1 != null)
{
int i = vector1.size();
if(i > 0)
{
Object obj1 = null;
for(int j = 0; j < i; j++)
{
ChatMessage chatmessage = (ChatMessage)vector1.elementAt(j);
addNewMessage(chatmessage);
}
if(!form.isShown())
{
unReadMessageCount += i;
total_UnReadMessageCount += i;
if(!unReadQueue.contains(this))
unReadQueue.addElement(this);
}
MMIDlet.instance.notifyNewMessage(this);
}
}
}
private void addNewMessage(ChatMessage chatmessage)
{
messages.addElement(chatmessage);
form.insert(0, chatmessage);
if(messages.size() > 30)
{
messages.removeElementAt(0);
form.delete(form.size() - 1);
}
}
public void onBuddyUpdate()
{
if(uris.size() == 1)
{
if(MMIDlet.instance.isBlock(uris.firstElement().toString()))
{
if(sessionName != null)
{
Transform.instance.byeChatSession(new String[] {
getSessionName()
});
sessionName = null;
}
removeUnuseCommand();
Ticker ticker1 = form.getTicker();
if(ticker1 == null)
{
ticker1 = new Ticker("该好友在黑名单中,从黑名单解除才能继续该会话。");
form.setTicker(ticker1);
} else
{
ticker1.setString("该好友在黑名单中,从黑名单解除才能继续该会话。");
}
} else
{
form.setTicker(null);
reAddWillRemoveCommands();
}
} else
{
Ticker ticker2 = form.getTicker();
if(ticker2 != null)
ticker2.setString(form.getTitle());
}
form.setTitle(getAllUriString(uris));
}
private void removeUnuseCommand()
{
Enumeration enumeration = willRemoveCommands.elements();
while (enumeration.hasMoreElements()) {
form.removeCommand((Command) enumeration.nextElement());
}
}
private String getAllUriString(Vector vector)
{
StringBuffer stringbuffer = new StringBuffer();
for(int i = 0; i < vector.size(); i++)
{
stringbuffer.append(MMIDlet.instance.getNickNameByUri(vector.elementAt(i).toString()));
stringbuffer.append('\uFF0C');
}
stringbuffer.deleteCharAt(stringbuffer.length() - 1);
stringbuffer.append(" - 对话");
return stringbuffer.toString();
}
public void sendMessage(ChatMessage chatmessage)
{
if(state != 1)
{
state++;
addNewMessage(chatmessage);
Transform.instance.sendChatMessage(chatmessage.getContent(), this);
show(MMIDlet.display);
MMIDlet.instance.tb_WriteMessage.setString("");
} else
{
MMIDlet.instance.showAlert("当前不能发送消息,请稍候。", null);
}
}
public void close()
{
form = null;
messages = null;
uris = null;
ticker = null;
key = null;
sessionName = null;
total_UnReadMessageCount -= unReadMessageCount;
unReadMessageCount = 0;
unReadQueue.removeElement(this);
objCounter--;
}
public String toString()
{
return " [key=" + key + ",sessionName=" + sessionName + "]";
}
public String getSessionName()
{
return sessionName;
}
public void on_NetworkError(String s)
{
form.insert(0, new StringItem("网络错误,以下消息无法发送", s));
}
public void on_SessionExpired()
{
if(uris.size() > 1)
{
removeUnuseCommand();
form.insert(0, new StringItem("", "该会话已经过期,请关闭后重新发起会话!\n"));
} else
{
sessionName = null;
state = 0;
}
}
public boolean containBuddies(Vector vector)
{
for(Enumeration enumeration = vector.elements(); enumeration.hasMoreElements();)
if(containBuddy((Buddy)enumeration.nextElement()))
return true;
return false;
}
public void commandAction(Command command, Displayable displayable)
{
if(command == Setting.cmd_Back)
MMIDlet.instance.popAndBackScreen(displayable);
else
if(command == Setting.cmd_Close)
{
MMIDlet.instance.closeChatSession(this);
MMIDlet.instance.popAndBackScreen(displayable);
} else
if(command == Setting.cmd_WriteMessage)
MMIDlet.instance.showWriteMessage();
else
if(command == CMD_INVITE_MORE)
{
Vector vector = MMIDlet.instance.getOnlineBuddies(uris);
if(vector.isEmpty())
form.insert(0, new StringItem("提示", "现在无法邀请好友加入这个会话\n", 0));
else
MMIDlet.instance.showSelectedBuddiesList(vector, "邀请多人", 2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -