/* * Copyright 2011 Uwe Krueger. * * 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 com.mandelsoft.mand.srv; /** * * @author Uwe Krüger */ public class LocalServer extends AbstractServer { private Handler handler; private RequestProcessor processor; public LocalServer(String[] args) { int proc=1; int c=0; while (args.length>c&&args[c].charAt(0)=='-') { String arg=args[c++]; for (int i=1; i<arg.length(); i++) { char opt; switch (opt=arg.charAt(i)) { case 'p': // port if (args.length>c) { try { proc=Integer.parseInt(args[c++]); } catch (Exception ex) { throw new IllegalArgumentException("port number expected"); } } else throw new IllegalArgumentException("port missing"); break; default: throw new IllegalArgumentException("illegal option '"+opt+"'"); } } } processor=new RequestProcessor(proc); } public LocalServer(int n) { processor=new RequestProcessor(n); handler=new Handler(); handler.start(); } public void sendRequest(CalcRequest req) { processor.sendRequest(req); } public void syncEmpty() throws InterruptedException { processor.syncEmpty(); } private class Handler extends Thread { private boolean abort=false; public void abort() { abort=true; } @Override public void run() { do { try { CalcRequest req=processor.getDoneView().pull(); req.fireChangeEvent(); } catch (InterruptedException ex) { } } while (!abort); } } }