/protocols/ss7/mtp/mtp-impl/src/main/java/org/mobicents/protocols/ss7/mtp/MTPScheduler.java
Java | 79 lines | 44 code | 7 blank | 28 comment | 11 complexity | 15aeb90b7db9e010705563f0c4321de6 MD5 | raw file
1/* 2 * JBoss, Home of Professional Open Source 3 * Copyright 2011, Red Hat, Inc. and individual contributors 4 * by the @authors tag. See the copyright.txt in the distribution for a 5 * full listing of individual contributors. 6 * 7 * This is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation; either version 2.1 of 10 * the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this software; if not, write to the Free 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 21 */ 22 23package org.mobicents.protocols.ss7.mtp; 24 25import org.apache.log4j.Logger; 26 27/** 28 * 29 * @author kulikov 30 */ 31public class MTPScheduler { 32 protected static final Logger logger = Logger.getLogger(MTPScheduler.class); 33 protected MTPTask[] tasks = new MTPTask[5]; 34 35 MTPTask tempTask = null; 36 37 public void schedule(MTPTask task, int delay) { 38 task.deadLine= System.currentTimeMillis() + delay; 39 for (int i = 0; i < tasks.length; i++) { 40 if (tasks[i] == null || tasks[i].canceled) { 41 task.canceled = false; 42 tasks[i] = task; 43 task.index = i; 44 task.scheduler = this; 45 break; 46 } 47 } 48 } 49 50 public void tick() { 51 long now = System.currentTimeMillis(); 52 for (int i = 0; i < tasks.length; i++) { 53 if (tasks[i] != null && (tasks[i].deadLine <= now)) { 54 //check if has been canceled from different thread. 55 if (tasks[i].canceled) { 56 tasks[i] = null; 57 }else 58 { 59 tempTask = tasks[i]; 60 try{ 61 tempTask.run(); 62 }catch(Exception e) 63 { 64 if(logger.isDebugEnabled()) 65 { 66 logger.debug("Failuer on task run.",e); 67 } 68 } 69 //check if its canceled after run; 70 if (tasks[i].canceled) { 71 tasks[i] = null; 72 } 73 } 74 //tempTask = null; 75 76 } 77 } 78 } 79}