PageRenderTime 20ms CodeModel.GetById 14ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/protocols/ss7/mtp/mtp-impl/src/main/java/org/mobicents/protocols/ss7/mtp/MTPScheduler.java

http://mobicents.googlecode.com/
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}