/* * Copyright 1999-2012 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package fm.liu.timo.manager.response; import java.util.ArrayList; import java.util.List; import org.pmw.tinylog.Logger; import fm.liu.timo.TimoServer; import fm.liu.timo.manager.ManagerConnection; import fm.liu.timo.mysql.packet.OkPacket; import fm.liu.timo.net.NIOProcessor; import fm.liu.timo.net.connection.FrontendConnection; import fm.liu.timo.net.connection.NIOConnection; import fm.liu.timo.util.SplitUtil; /** * @author xianmao.hexm 2011-5-18 下午05:59:02 */ public final class KillConnection { public static void response(String stmt, int offset, ManagerConnection mc) { int count = 0; List<FrontendConnection> list = getList(stmt, offset, mc); if (list != null) for (NIOConnection c : list) { Logger.info("{} is killed by manager", c); c.close("killed by manager"); count++; } OkPacket packet = new OkPacket(); packet.packetId = 1; packet.affectedRows = count; packet.serverStatus = 2; packet.write(mc); } private static List<FrontendConnection> getList(String stmt, int offset, ManagerConnection mc) { String ids = stmt.substring(offset).trim(); if (ids.length() > 0) { String[] idList = SplitUtil.split(ids, ',', true); List<FrontendConnection> fcList = new ArrayList<FrontendConnection>(idList.length); NIOProcessor[] processors = TimoServer.getInstance().getProcessors(); for (String id : idList) { long value = 0; try { value = Long.parseLong(id); } catch (NumberFormatException e) { continue; } FrontendConnection fc = null; for (NIOProcessor p : processors) { if ((fc = p.getFrontends().get(value)) != null) { fcList.add(fc); break; } } } return fcList; } return null; } }