0

I have implemented a SIP Servlet, where I receive two types of messages from the clients. I can receive either a high priority message and low priority message, which I separate when I'm reading the URIs of the messages as shown in the code below. I have to implement a basic stopwatch, which increments the "count" integer declared in code below. How do I make such a stopwatch and resetting it ?.

protected void doRequest(SipServletRequest reqfromclient) throws javax.servlet.ServletException, java.io.IOException {
    if( reqfromclient.getMethod().equals("MESSAGE") ) {
        String MESSAGE = reqfromclient.getContent().toString();
        System.out.println("The arrived message is " + MESSAGE);          

        // Assign the callee URI
        String URICallee = reqfromclient.getTo().getURI().toString();

         //Assign the caller URI
        String URICaller = reqfromclient.getFrom().getURI().toString();


        //DECLARE STOPWATCH
        int count = 0;


        // Now the Highprio and Lowprio alerts have to be separated
        if(URICallee.endsWith("policeHigh.com")) {
            // RESET STOPWATCH
            //START THE STOPWATCH. INCREMENT COUNT EVERY SECOND
        }

        else if(URICallee.endsWith("policeLow.com")) {              
            if(count == 21) {                   
            //something
            }
        }
    }
4

1 回答 1

1

要基于计时器执行一些任意代码,请使用ServletTimer可以从TimerService. 这有几个部分:

  • 当您要设置计时器时,请获取对TimerService.
  • 使用TimerService来创建ServletTimer具有所需超时期限的。
  • 存储ServletTimer某处的 ID(作为SipSessionor中的属性SipApplicationSession)。
  • 如果需要取消定时器,则从会话中检索定时器 ID,检索使用的定时器sipApplicationSession.getTimer(id)并调用cancel()它。
  • 您将需要一些实现TimerListener接口的类。如果您愿意,它可以是您的 servlet 类。timeout使用您的应用程序在超时到期时需要执行的逻辑来实现该方法。如本链接所述,在 SIP 部署描述符中将类声明为 a listener
  • 可选:当您的通话结束时, call sipApplicationSession.invalidate(),这将取消所有未完成的计时器。

此处显示了一个简单的示例。该示例的缺陷在于它将 存储ServletTimer为 servlet 类的字段,因此当后续调用进入时它将被覆盖。将 ID 作为属性存储SipApplicationSession将防止其被覆盖。

于 2014-04-01T17:45:05.010 回答