Package org.pokenet.server.feature

Source Code of org.pokenet.server.feature.ChatManager

package org.pokenet.server.feature;

import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

import org.apache.mina.core.session.IoSession;
import org.pokenet.server.GameServer;
import org.pokenet.server.backend.entity.PlayerChar.Language;
import org.pokenet.server.backend.map.ServerMap;
import org.pokenet.server.network.TcpProtocolHandler;
import org.pokenet.server.network.message.ChatMessage;
import org.pokenet.server.network.message.ChatMessage.ChatMessageType;

/**
* Handles chat messages sent by players
* @author shadowkanji
*
*/
public class ChatManager implements Runnable {
        private Thread m_thread;
        @SuppressWarnings("unused")
        private boolean m_isRunning;
        /*
         * Local chat queue
         * [Message, x, y]
         */
        private Queue<Object []> m_localQueue;
        /*
         * Private chat queue
         * [session, sender, message]
         */
        private Queue<Object []> m_privateQueue;
       
        /**
         * Default Constructor
         */
        public ChatManager() {
                m_thread = new Thread(this);
                m_localQueue = new ConcurrentLinkedQueue<Object []>();
                m_privateQueue = new ConcurrentLinkedQueue<Object []>();
        }
       
        /**
         * Returns how many messages are queued in this chat manager
         * @return
         */
        public int getProcessingLoad() {
                return m_localQueue.size() + m_privateQueue.size();
        }
       
        /**
         * Queues a local chat message
         * @param message
         * @param mapX
         * @param mapY
         */
        public void queueLocalChatMessage(String message, int mapX, int mapY, Language l) {
                m_localQueue.add(new Object[]{message, String.valueOf(mapX), String.valueOf(mapY), String.valueOf(l)});
        }
       
        /**
         * Queues a private chat message
         * @param message
         * @param receiver
         * @param sender
         */
        public void queuePrivateMessage(String message, IoSession receiver, String sender) {
                m_privateQueue.add(new Object[]{receiver, sender, message});
        }
       
        /**
         * Called by m_thread.start()
         */
        public void run() {
                Object [] o;
                ServerMap m;
                IoSession s;
                while(true) {
                        //Send next local chat message
                        if(m_localQueue.peek() != null) {
                                o = m_localQueue.poll();
                                m = GameServer.getServiceManager().getMovementService().
                                        getMapMatrix().getMapByGamePosition(Integer.parseInt((String) o[1]), Integer.parseInt((String) o[2]));
                                if(m != null)
                                        m.sendChatMessage((String) o[0], Language.valueOf(((String)o[3])));
                        }
                        //Send next private chat message
                        if(m_privateQueue.peek() != null) {
                                o = m_privateQueue.poll();
                                s = (IoSession) o[0];
                                if(s.isConnected() && !s.isClosing())
                                        TcpProtocolHandler.writeMessage(s, new ChatMessage(
                                                        ChatMessageType.PRIVATE, ((String) o[1]) + "," + ((String) o[2])));
                        }
                        try {
                                Thread.sleep(250);
                        } catch (Exception e) {}
                }
        }
       
        /**
         * Start this chat manager
         */
        public void start() {
                m_isRunning = true;
                m_thread.start();
        }
       
        /**
         * Stop this chat manager
         */
        public void stop() {
                m_isRunning = false;
        }

}
TOP

Related Classes of org.pokenet.server.feature.ChatManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.