⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatsession.java

📁 飞信的j2me源代码
💻 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 + -