📄 avoirrealtimeplugin.java
字号:
/* * * Copyright (C) GNU/GPL AVOIR 2008 * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package org.avoir.realtime.plugins;import java.io.ByteArrayInputStream;import java.io.File;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.avoir.realtime.common.util.XmlUtils;import org.jivesoftware.openfire.IQHandlerInfo;import org.jivesoftware.openfire.IQRouter;import org.jivesoftware.openfire.PacketRouter;import org.jivesoftware.openfire.PresenceManager;import org.jivesoftware.openfire.RoutingTable;import org.jivesoftware.openfire.XMPPServer;import org.jivesoftware.openfire.auth.UnauthorizedException;import org.jivesoftware.openfire.container.Plugin;import org.jivesoftware.openfire.container.PluginManager;import org.jivesoftware.openfire.handler.IQHandler;import org.jivesoftware.openfire.muc.MUCEventDispatcher;import org.jivesoftware.openfire.user.User;import org.w3c.dom.Document;import org.xmpp.packet.IQ;import org.xmpp.packet.JID;/** * * @author developer */public class AvoirRealtimePlugin implements Plugin { private XMPPServer server = XMPPServer.getInstance(); private PacketRouter packetRouter = server.getPacketRouter(); private String domain = server.getServerInfo().getXMPPDomain(); private IQRouter iqRouter = XMPPServer.getInstance().getIQRouter(); private DefaultPacketProcessor defaultPacketProcessor = new DefaultPacketProcessor(this); private QuestionProcessor questionProcessor = new QuestionProcessor(this); private SlideShowProcessor slideshowProcessor = new SlideShowProcessor(this); private RealtimeRoomProcessor roomProcessor = new RealtimeRoomProcessor(this); private PointerProcessor pointerProcessor = new PointerProcessor(this); private RoomResourceManager roomResourceManager = new RoomResourceManager(); public AvoirRealtimePlugin() { iqRouter.addHandler(new RealtimeIQHandler()); String[] exts = {"images", "slideshows", "questions", "notepads", "answers"}; for (int i = 0; i < exts.length; i++) { new File(Constants.FILES_DIR + "/" + exts[i]).mkdirs(); } MUCEventDispatcher.addListener(new RoomEventListener()); } public void destroyPlugin() { } public void initializePlugin(PluginManager pluginManager, File file) { } protected class RealtimeIQHandler extends IQHandler { public RealtimeIQHandler() { super("Realtime Handler"); } public IQHandlerInfo getInfo() { return new IQHandlerInfo("query", Constants.NAME_SPACE); } public IQ handleIQ(IQ packet) throws UnauthorizedException { String xml = packet.toXML(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document doc = documentBuilder.parse( new ByteArrayInputStream(xml.getBytes(Constants.PREFERRED_ENCODING))); String mode = XmlUtils.readString(doc, "mode"); if (mode.equals(Mode.POINTER)) { pointerProcessor.broadCastPointer(packet); } else if (mode.equals(Mode.MODIFIED_TEXT_BROADCAST)) { return packet; } else if (mode.equals(Mode.UPDATE_TEXT_ITEM)) { defaultPacketProcessor.broadcastModifiedTextItem(packet); } else if (mode.equals(Mode.CHANGE_ACCESS)) { return defaultPacketProcessor.changeAccess(packet, doc); } else if (mode.equals(Mode.BROADCAST_OUT_SLIDE)) { return packet; } else if (mode.equals(Mode.BROADCAST_IN_SLIDE)) { slideshowProcessor.broadcastSlide(packet, doc); } else if (mode.equals(Mode.DOWNLOAD_ROOM_SLIDE_SHOW)) { return slideshowProcessor.downloadSlideShowFile(packet, doc); } else if (mode.equals(Mode.REQUEST_ROOM_RESOURCES)) { String roomName = XmlUtils.readString(doc, "room-name"); return roomResourceManager.getRoomResources(packet, roomName); } else if (mode.equals(Mode.ADD_SLIDE_SHOW_CLASS_RESOURCE)) { String roomName = XmlUtils.readString(doc, "room-name"); String filePath = XmlUtils.readString(doc, "file-path"); return roomResourceManager.addSlideShowAsRoomResource(packet, roomName, filePath); } else if (mode.equals(Mode.SAVE_SLIDE_SHOW)) { return slideshowProcessor.saveSlideShowFile(packet, doc); } else if (mode.equals(Mode.POSTED_ANSWER)) { return packet; } else if (mode.equals(Mode.POST_ANSWER)) { questionProcessor.saveAndForwardAnswer(packet, doc); } else if (mode.equals(Mode.OPEN_SLIDE_SHOW_QUESTION)) { return questionProcessor.openQuestionFile(packet, doc, "slide-show"); } else if (mode.equals(Mode.OPEN_SLIDE_SHOW)) { return slideshowProcessor.openSlideShowFile(packet, doc); } else if (mode.equals(Mode.OPEN_QUESTION)) { return questionProcessor.openQuestionFile(packet, doc); } else if (mode.equals(Mode.BROADCAST_QUESTION)) { return packet; } else if (mode.equals(Mode.POST_QUESTION)) { questionProcessor.broadQuestion(packet, doc); } else if (mode.equals(Mode.SAVE_QUESTION)) { return questionProcessor.saveQuestionFile(packet, doc); } else if (mode.equals(Mode.UPLOAD_IMAGE)) { return defaultPacketProcessor.saveRealtimeImageFile(packet, doc); } else if (mode.equals(Mode.REQUEST_SLIDE_QUESTION_FILE_VIEW)) { String fileType = XmlUtils.readString(doc, "file-type"); String username = XmlUtils.readString(doc, "username"); return defaultPacketProcessor.getFileView(packet, fileType, username, "slide-question"); } else if (mode.equals(Mode.BROADCAST_WB_ITEM)) { defaultPacketProcessor.broadcastItem(packet); } else if (mode.equals(Mode.ITEM_BROADCAST_FROM_SERVER)) { return packet; } else if (mode.equals(Mode.REQUEST_FILE_VIEW)) { String fileType = XmlUtils.readString(doc, "file-type"); String username = XmlUtils.readString(doc, "username"); return defaultPacketProcessor.getFileView(packet, fileType, username); } else if (mode.equals(Mode.DOWNLOAD_QUESTION_IMAGE)) { String imagePath = XmlUtils.readString(doc, "image-path"); return defaultPacketProcessor.getRealtimeImageFile(packet, imagePath, "question"); } else if (mode.equals(Mode.DOWNLOAD_SLIDE_SHOW_IMAGE)) { String imagePath = XmlUtils.readString(doc, "image-path"); return defaultPacketProcessor.getRealtimeImageFile(packet, imagePath, "slide-show"); } else if (mode.equals(Mode.BROADCAST_IMAGE)) { String imagePath = XmlUtils.readString(doc, "image-path"); defaultPacketProcessor.broadcastImage(packet, imagePath); } else if (mode.equals(Mode.DELETE_ITEM_BROADCAST)) { return packet; } else if (mode.equals(Mode.RESIZE_ITEM_BROADCAST)) { return packet; } else if (mode.equals(Mode.TRANSFORMED_ITEM_BROADCAST)) { return packet; } else if (mode.equals(Mode.UPDATE_ITEM_POSITION)) { String id = XmlUtils.readString(doc, "item-id"); String type = XmlUtils.readString(doc, "item-type"); if (type.equals("line")) { int x1 = XmlUtils.readInt(doc, "x1"); int y1 = XmlUtils.readInt(doc, "y1"); int x2 = XmlUtils.readInt(doc, "x2"); int y2 = XmlUtils.readInt(doc, "y2"); defaultPacketProcessor.broadcastItemPosition(packet, x1, y1, x2, y2, id, type); } else { int x = XmlUtils.readInt(doc, "x"); int y = XmlUtils.readInt(doc, "y"); defaultPacketProcessor.broadcastItemPosition(packet, x, y, id, type); } } else if (mode.equals(Mode.RESIZE_ITEM)) { String id = XmlUtils.readString(doc, "item-id"); String type = XmlUtils.readString(doc, "item-type"); if (type.equals("line")) { int x1 = XmlUtils.readInt(doc, "x1"); int y1 = XmlUtils.readInt(doc, "y1"); int x2 = XmlUtils.readInt(doc, "x2"); int y2 = XmlUtils.readInt(doc, "y2"); defaultPacketProcessor.broadcastItemPosition(packet, x1, y1, x2, y2, id, type); } else { int x = XmlUtils.readInt(doc, "x"); int y = XmlUtils.readInt(doc, "y"); String r_type = XmlUtils.readString(doc, "r-type"); defaultPacketProcessor.broadcastResizedItem(packet, id, x, y, r_type); } } else if (mode.equals(Mode.DELETE_ITEM)) { String id = XmlUtils.readString(doc, "item-id"); defaultPacketProcessor.broadcastItemToBeDeleted(packet, id); } else if (mode.equals(Mode.WB_IMAGE_BROADCAST)) { return packet; } else if (mode.equals(Mode.POINTER_BROADCAST)) { return packet; } else if (mode.equals(Mode.REQUEST_USER_LIST)) { return roomProcessor.getUsers(packet, mode); } else if (mode.equals(Mode.REQUEST_USER_PROPERTIES)) { return roomProcessor.getUsers(packet, mode); } else if (mode.equals(Mode.UPDATE_USER_PROPERTIES)) { roomProcessor.updateUserProperties(packet); } else if (mode.equals(Mode.CREATE_ROOM)) { return roomProcessor.initCreateRoom(packet, doc); } else if (mode.equals(Mode.REQUEST_ADMIN_LIST)) { return roomProcessor.getAdmins(packet); } else if (mode.equals(Mode.REQUEST_ROOM_LIST)) { return roomProcessor.getRooms(packet); } } catch (Exception ex) { ex.printStackTrace(); } return null; } } public ArrayList<JID> getUsers(boolean onlineUsersOnly) { //onlineUsersOnly = true; ArrayList<JID> jids = new ArrayList<JID>(); PresenceManager presenceManager = server.getPresenceManager(); RoutingTable routingTable = server.getRoutingTable(); Collection<User> users = server.getUserManager().getUsers(); Iterator<User> itrUsers = users.iterator(); while (itrUsers.hasNext()) { User user = itrUsers.next(); JID jid = server.createJID(user.getUsername(), "Smack"); if (presenceManager.isAvailable(user)) { // add all active resources jids.addAll(routingTable.getRoutes(jid, null)); } else if (!onlineUsersOnly) { // send offline message to bareJID jids.add(jid); } } return jids; } public RoomResourceManager getRoomResourceManager() { return roomResourceManager; } public PacketRouter getPacketRouter() { return packetRouter; } public String getDomain() { return domain; } public DefaultPacketProcessor getDefaultPacketProcessor() { return defaultPacketProcessor; } public QuestionProcessor getQuestionProcessor() { return questionProcessor; } public SlideShowProcessor getSlideshowProcessor() { return slideshowProcessor; } public IQRouter getIqRouter() { return iqRouter; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -