Wash, WashingMessage updates and ActorThread poll method
This commit is contained in:
		
							parent
							
								
									149b952fe5
								
							
						
					
					
						commit
						f3a839e4d0
					
				
					 3 changed files with 67 additions and 6 deletions
				
			
		|  | @ -2,6 +2,7 @@ package actor; | ||||||
| 
 | 
 | ||||||
| import java.util.concurrent.LinkedBlockingQueue; | import java.util.concurrent.LinkedBlockingQueue; | ||||||
| import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||||
|  | import java.util.Optional; | ||||||
| 
 | 
 | ||||||
| public class ActorThread<M> extends Thread { | public class ActorThread<M> extends Thread { | ||||||
| 
 | 
 | ||||||
|  | @ -23,4 +24,8 @@ public class ActorThread<M> extends Thread { | ||||||
|     protected M receiveWithTimeout(long timeout) throws InterruptedException { |     protected M receiveWithTimeout(long timeout) throws InterruptedException { | ||||||
|         return q.poll(timeout, TimeUnit.MILLISECONDS); |         return q.poll(timeout, TimeUnit.MILLISECONDS); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     protected Optional<M> poll(long timeOut) throws InterruptedException { | ||||||
|  |         return Optional.ofNullable(q.poll(timeOut, TimeUnit.MILLISECONDS)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | @ -19,13 +19,34 @@ public class Wash { | ||||||
|         water.start(); |         water.start(); | ||||||
|         spin.start(); |         spin.start(); | ||||||
| 
 | 
 | ||||||
|         while (true) { |         ActorThread<WashingMessage> t = null; | ||||||
|  | 
 | ||||||
|  |         outer: while (true) { | ||||||
|             int n = io.awaitButton(); |             int n = io.awaitButton(); | ||||||
|             System.out.println("user selected program " + n); |             System.out.println("user selected program " + n); | ||||||
| 
 | 
 | ||||||
|             // TODO: |  | ||||||
|             // if the user presses buttons 1-3, start a washing program |             // if the user presses buttons 1-3, start a washing program | ||||||
|             // if the user presses button 0, and a program has been started, stop it |             // if the user presses button 0, and a program has been started, stop it | ||||||
|  | 
 | ||||||
|  |             switch (n) { | ||||||
|  |                 case 0 -> t = new WashingProgram0(io, temp, water, spin); | ||||||
|  |                 case 1 -> t = new WashingProgram1(io, temp, water, spin); | ||||||
|  |                 case 2 -> t = new WashingProgram1(io, temp, water, spin); | ||||||
|  |                 case 3 -> t = new WashingProgram3(io, temp, water, spin); | ||||||
|  |                 default -> { | ||||||
|  |                     System.out.println("Invalid program number"); | ||||||
|  |                     break outer; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | 
 | ||||||
|  |             t.start(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         temp.interrupt(); | ||||||
|  |         water.interrupt(); | ||||||
|  |         spin.interrupt(); | ||||||
|  | 
 | ||||||
|  |         if (t != null) | ||||||
|  |             t.interrupt(); | ||||||
|  |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -8,11 +8,8 @@ import actor.ActorThread; | ||||||
|  * - from washing programs to temperature controller (TEMP_xxx) |  * - from washing programs to temperature controller (TEMP_xxx) | ||||||
|  * - from washing programs to water controller (WATER_xxx) |  * - from washing programs to water controller (WATER_xxx) | ||||||
|  * - from controllers to washing programs (ACKNOWLEDGMENT) |  * - from controllers to washing programs (ACKNOWLEDGMENT) | ||||||
|  *  |  | ||||||
|  * @param sender   the thread that sent the message |  | ||||||
|  * @param order    an order, such as SPIN_FAST or WATER_DRAIN |  | ||||||
|  */ |  */ | ||||||
| public record WashingMessage(ActorThread<WashingMessage> sender, Order order) { | public final class WashingMessage { | ||||||
| 
 | 
 | ||||||
|     // possible values for the 'order' attribute |     // possible values for the 'order' attribute | ||||||
|     public enum Order { |     public enum Order { | ||||||
|  | @ -27,4 +24,42 @@ public record WashingMessage(ActorThread<WashingMessage> sender, Order order) { | ||||||
|         WATER_DRAIN, |         WATER_DRAIN, | ||||||
|         ACKNOWLEDGMENT |         ACKNOWLEDGMENT | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // Who sent the message | ||||||
|  |     private final ActorThread<WashingMessage> sender; | ||||||
|  | 
 | ||||||
|  |     // What the message is about | ||||||
|  |     private final Order order; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @param sender the thread that sent the message | ||||||
|  |      * @param order  an order, such as SPIN_FAST or WATER_DRAIN | ||||||
|  |      */ | ||||||
|  |     public WashingMessage(ActorThread<WashingMessage> sender, Order order) { | ||||||
|  |         this.sender = sender; | ||||||
|  |         this.order = order; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Extract the sender from the message | ||||||
|  |     public ActorThread<WashingMessage> sender() { | ||||||
|  |         return sender; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Extract the order from the message | ||||||
|  |     public Order order() { | ||||||
|  |         return order; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Return a string representation of the message | ||||||
|  |     public String toString() { | ||||||
|  |         return new StringBuilder(order.toString()) | ||||||
|  |                 .append(" from ") | ||||||
|  |                 .append(sender == null ? "(null)" : sender.getClass().getSimpleName()) | ||||||
|  |                 .toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Send acknowledgment to the sender | ||||||
|  |     public void sendAck(ActorThread<WashingMessage> sender) { | ||||||
|  |         this.sender().send(new WashingMessage(sender, Order.ACKNOWLEDGMENT)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus