/*
 * Copyright 2009 Richard Zschech.
 * 
 * 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 net.zschech.gwt.comettest.server;

import java.io.IOException;
import java.io.InterruptedIOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import net.zschech.gwt.comet.server.CometServlet;
import net.zschech.gwt.comet.server.CometServletResponse;
import net.zschech.gwt.comet.server.CometSession;

public class LatencyTestServlet extends CometServlet {
	
	@Override
	protected void doComet(final CometServletResponse cometResponse) throws ServletException, IOException {
		HttpServletRequest request = cometResponse.getRequest();
		final int count = Integer.parseInt(request.getParameter("count"));
		final int delay = Integer.parseInt(request.getParameter("delay"));
		final CometSession session = null;//cometResponse.getSession();
		
		new Thread() {
			public void run() {
				try {
					if (session == null) {
						for (int i = 0; i < count; i++) {
							cometResponse.write(String.valueOf(System.currentTimeMillis()));
							try {
								Thread.sleep(delay);
							}
							catch (InterruptedException e) {
								throw new InterruptedIOException();
							}
						}
						cometResponse.terminate();
					}
					else {
						for (int i = 0; i < count; i++) {
							session.enqueue(String.valueOf(System.currentTimeMillis()));
							try {
								Thread.sleep(delay);
							}
							catch (InterruptedException e) {
								throw new InterruptedIOException();
							}
						}
						session.invalidate();
					}
				}
				catch (IOException e) {
					log("Error writing data", e);
				}
			}
		}.start();
	}
}

@@ -1542,24 +1542,111 @@
 nt; i++) %7B%0D%0A
+%09%09%09%09%09%09%09synchronized (cometResponse) %7B%0D%0A%09%09%09%09%09%09%09%09if (!cometResponse.isTerminated()) %7B%0D%0A%09%09
 %09%09%09%09%09%09%09comet
@@ -1705,32 +1705,34 @@
 is()));%0D%0A%09%09%09%09%09%09%09
+%09%09
 try %7B%0D%0A%09%09%09%09%09%09%09%09T
@@ -1722,32 +1722,34 @@
 %09try %7B%0D%0A%09%09%09%09%09%09%09%09
+%09
+%09
 Thread.sleep(del
@@ -1753,32 +1753,34 @@
 delay);%0D%0A%09%09%09%09%09%09%09
+%09%09
 %7D%0D%0A%09%09%09%09%09%09%09catch 
@@ -1765,32 +1765,34 @@
 %09%09%09%09%09%09%7D%0D%0A%09%09%09%09%09%09%09
+%09
+%09
 catch (Interrupt
@@ -1801,32 +1801,34 @@
 Exception e) %7B%0D%0A
+%09%09
 %09%09%09%09%09%09%09%09throw ne
@@ -1848,32 +1848,55 @@
 IOException();%0D%0A
+%09%09%09%09%09%09%09%09%09%7D%0D%0A%09%09%09%09%09%09%09%09%7D%0D%0A
 %09%09%09%09%09%09%09%7D%0D%0A%09%09%09%09%09%09

Clean up comet test cases