1
//////////////////////////////////////////////////////////////////////
3
// JCSP ("CSP for Java") Libraries //
4
// Copyright (C) 1996-2008 Peter Welch and Paul Austin. //
5
// 2001-2004 Quickstone Technologies Limited. //
7
// This library is free software; you can redistribute it and/or //
8
// modify it under the terms of the GNU Lesser General Public //
9
// License as published by the Free Software Foundation; either //
10
// version 2.1 of the License, or (at your option) any later //
13
// This library is distributed in the hope that it will be //
14
// useful, but WITHOUT ANY WARRANTY; without even the implied //
15
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
16
// PURPOSE. See the GNU Lesser General Public License for more //
19
// You should have received a copy of the GNU Lesser General //
20
// Public License along with this library; if not, write to the //
21
// Free Software Foundation, Inc., 59 Temple Place, Suite 330, //
22
// Boston, MA 02111-1307, USA. //
24
// Author contact: P.H.Welch@kent.ac.uk //
27
//////////////////////////////////////////////////////////////////////
30
import org.jcsp.lang.*;
35
public class PriPlexTimeInt implements CSProcess {
37
private final AltingChannelInputInt[] in;
38
private final ChannelOutputInt out;
39
private final long timeout;
41
public PriPlexTimeInt (final AltingChannelInputInt[] in, final ChannelOutputInt out,
45
this.timeout = timeout;
50
final Guard[] guards = new Guard[in.length + 1];
51
System.arraycopy (in, 0, guards, 0, in.length);
53
final CSTimer tim = new CSTimer ();
54
final int timerIndex = in.length;
55
guards[timerIndex] = tim;
57
final Alternative alt = new Alternative (guards);
59
boolean running = true;
60
tim.setAlarm (System.currentTimeMillis () + timeout);
62
final int index = alt.priSelect ();
63
if (index == timerIndex) {
66
out.write (in[index].read ());
69
//System.out.println ("Goodbye from PriPlexTime ...");
70
//System.out.println ("You'll need to ctl<C>, sorry ...");