Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package divconq.ctp.f;
  
  import java.util.Scanner;
  
 
 /*
 Title: Download Flow
 Participant Client Code
 Participant File Store A
 Participant Pipe A
 Participant Handler A
 Participant Adapter A
 Participant Server
 Client Code->Adapter A: select
 Adapter A->Server: SELECT
 Server->Adapter A: SUCCESS
 Adapter A->Handler A: SUCCESS
 Handler A->Client Code: success
 Client Code->Handler A: set pipe
 Client Code->Adapter A: read
 Adapter A->Server: READ
 Server->Adapter A: BLOCK
 Adapter A->Handler A: BLOCK
 Handler A->Pipe A: BLOCK
 Pipe A->File Store A: BLOCK
 File Store A->Pipe A: request
 Pipe A->Handler A: request
 Handler A->Adapter A: read
 Adapter A->Server: READ
 Server->Adapter A: BLOCK*\netc...
 Server->Adapter A: FINAL
 Adapter A->Handler A: FINAL
 Handler A->Client Code: final
 Client Code->Handler A: close pipe
 Client Code->Adapter A: success
 Adapter A->Server: SUCCESS
  * 
  */
 
 public class CtpFClient extends CtpClient {
 	protected TaskRun currTask = null;
 	protected CtpStreamSource readStream = null;
 	
 	// when using this be sure to issue "read()" in callback
 	public void selectFiles(FileSelection selFuncCallback<RecordStructcb) {
 		RequestCommand cmd = new RequestCommand();
 		
 		RecordStruct params = new RecordStruct(
 				new FieldStruct("Select"sel.toInstructions())
 		);
 		
 		cmd.setBody(params);
 		
 		try {
 			this..sendCommand(cmdcb);
 		} 
 		catch (Exception x) {
 			..println("ctp client send error: " + x);
 		}
 	}
 	
 	public void handle(CtpCommand cmdCtpAdapter adapterthrows Exception {
 		OperationContext ctx = adapter.getContext();
 		
 		ctx.touch();
 		
 		//System.out.println("Client got command: " + cmd.getCmdCode());
		if (cmd instanceof ProgressCommand) {
			if (ctx != null) {
				// put the call back into the work pool, don't tie up the IO thread 
				Task t = new Task()
					.withWork(new IWork() {
						public void run(TaskRun trun) {
							adapter.read();
							trun.complete();
						}
					});
			}
			return;
		}
			//System.out.println("Client got Final!");
			TaskRun brun = this.;
			if (brun == null) {
				..println("Client READ error, missing task!!!!! " + ((BlockCommandcmd).getPath());
			}
			else if (src == null) {
				..println("Client READ error, missing src!!!!! " + ((BlockCommandcmd).getPath());
			}
			else {
				src.setFinal();
				brun.resume();
			}			
			return;
		}
		if (cmd instanceof BlockCommand) {
			//System.out.println("Client got block: " + ((BlockCommand) cmd).getPath());
			//System.out.println("Client got block - is folder: " + ((BlockCommand) cmd).isFolder());
			//System.out.println("Client got block - size: " + ((BlockCommand) cmd).getSize());
			TaskRun brun = this.;
			if (brun == null) {
				..println("Client READ error, missing task!!!!! " + ((BlockCommandcmd).getPath());
			}
			else if (src == null) {
				..println("Client READ error, missing src!!!!! " + ((BlockCommandcmd).getPath());
			}
			else {
				brun.resume();
				/*
			Task t = new Task()
				.withRootContext()		// TODO use session context
				.withWork(new IWork() {											
					@Override
					public void run(TaskRun trun) {
						if (((BlockCommand) cmd).getData() == null)
							System.out.println("Client processed empty block");
						else
							System.out.println("Client processed block: " + ((BlockCommand) cmd).getData().readableBytes());
    					
						adapter.read();
      					
						cmd.release();
						trun.complete();
					}
				});
				*/
			}
			return;
		}
		// get more, unless a stream command - then let it handle automatically
		/*
		if (!(cmd instanceof IStreamCommand)) {
			adapter.read();
			cmd.release();
		}
		*/
	}
	public void writeFrom(OperationCallback cbIStream... strm) {
		Task t = new Task()
			.withTitle("Stream Write");
		@SuppressWarnings("resource")
		IStreamDest writeStream = new CtpStreamDest(this.t.getContext());
			public void completed(OperationContext or) {
				//System.out.println("READ server is complete!!");
				//System.out.println("Context 3: " + OperationContext.get().getOpId());
				/*
				try {
					CtpFClient.this.adapter.sendCommand(new ResponseCommand());
				catch (Exception x) {
					System.out.println("Unable to send SUCCESS for READ: " + x);
				}
				*/
			}
		});
		IStream[] tstrm = new IStream[strm.length + 1];
		for (int i = 0; i < strm.lengthi++)
			tstrm[i] = strm[i];
		tstrm[strm.length] = writeStream;
		//System.out.println("strm 0: " + tstrm[0]);
		//System.out.println("strm 1: " + tstrm[1]);
		TaskRun trun = StreamUtil.composeStream(ttstrm); 
		this. = trun;
		trun.resume();
		// we can read while writing
		this..read();
	}
	public void readTo(OperationCallback cbIStream... strm) {
		//System.out.println("Context 2: " + OperationContext.get().getOpId());
		this. = new CtpStreamSource(this.);
		Task t = new Task()
			.withTitle("Stream Read");
			public void completed(OperationContext or) {
				//System.out.println("WRITE client is complete!!");
				//System.out.println("Context 3: " + OperationContext.get().getOpId());
				/*
				try {
					CtpFClient.this.adapter.sendCommand(new ResponseCommand());
				catch (Exception x) {
					System.out.println("Unable to send SUCCESS for READ: " + x);
				}
				*/
			}
		});
		IStream[] tstrm = new IStream[strm.length + 1];
		tstrm[0] = this.;
		for (int i = 1; i < tstrm.lengthi++)
			tstrm[i] = strm[i - 1];
		//System.out.println("strm 0: " + tstrm[0]);
		//System.out.println("strm 1: " + tstrm[1]);
		TaskRun trun = StreamUtil.composeStream(ttstrm); 
		this. = trun;
		trun.resume();
	}
	public void connect(String hostint portOperationCallback connCallback) {
		//System.out.println("Context 1: " + OperationContext.get().getOpId());
		super.connect(host, port, new OperationCallback() {			
			@Override
			public void callback() {
				adapter.setMapper(CtpfCommandMapper.instance);
			    
				/* TODO ???
			    CtpFClient.this.sendCommand(new InitCommand(), new FuncCallback<RecordStruct>() {					
					@Override
					public void callback() {
					    
					    System.out.println("Ctp F Client - Init complete");
					    
					    adapter.read();
					    
					    connCallback.complete();
					}
				});
				*/
			    System.out.println("Ctp F Client - Init complete");
			    
			    adapter.read();
			    
			    connCallback.complete();
			}
		});
	}
	public void folderListing(String path) {
        FileSelection sel = new FileSelection()
	    	.withFileSet(path)
	    try {
	    	this.selectFiles(selnew FuncCallback<RecordStruct>() {							
				public void callback() {
					//System.out.println("Context 4: " + OperationContext.get().getOpId());
					if (this.hasErrors()) {
						..println("Failed Selection: " + this.getMessage());
						.read();		// TODO or close?
						return;
					}
					try {
						//ctpf.sendCommand(new ReadCommand());
		            	CtpFClient.this.readTo(new OperationCallback() {										
							public void callback() {
								//System.out.println("Context 5: " + OperationContext.get().getOpId());
								..println("Directory listing completed!");
							}
						},
					catch (Exception x) {
						..println("Ctp-F Client cb error: " + x);
					}
					.read();		// get that folder listing
				}
			});
		}
		catch (Exception x) {
			..println("Ctp-F Client error: " + x);
		}
	}
	public void close() {
		..println("Client Connection closed");
	}
	static public void utilityMenu(Scanner scan) {
		OperationContext ctx = OperationContext.get();
			public void amount(OperationContext ctxint v) {
				..println("Progress: " + v);
			}
		};
		ctx.addObserver(oo);
		CtpFClient ctpf = new CtpFClient();
		ctpf.connect("localhost", 8181, new OperationCallback() {				
			public void callback() {
				cdl.countDown();
			}
		});
		try {
			cdl.await();
		catch (InterruptedException x) {
			..println("Error connecting: " + x);
			return;
		}
		boolean running = true;
		while(running) {
			try {
				..println("-----------------------------------------------");
				..println("   Hub " + ..getResources().getHubId() + " Utility Menu");
				..println("-----------------------------------------------");
				..println("0)  Exit");
				..println("1)  ls on karabiner");
				..println("2)  Folder Listing");
				..println("3)  Test Download");
				..println("4)  Test Upload");
				String opt = scan.nextLine();
				Long mopt = StringUtil.parseInt(opt);
				if (mopt == null)
					continue;
				switch (mopt.intValue()) {
				case 0:
					running = false;
					break;
				case 1: {
					ctpf.folderListing("/User/karabiner");
					break;
				}
				case 2: {
					..println("Folder to list: ");
					ctpf.folderListing(scan.nextLine());
					break;
				}
				case 3: {
		            FileSelection sel = new FileSelection()
		            	.withMode(.)
		            	.withFileSet("/User/Salt/long score 3.txt.out")
		            try {
		            	ctpf.selectFiles(sel
		            			new FuncCallback<RecordStruct>() {							
				    				@Override
				    				public void callback() {
				    					if (this.hasErrors()) {
				    						..println("Failed Selection: " + this.getMessage());
				    						
				    						ctpf.read();		// TODO or close?
				    						return;
				    					}
				    					
				    					//System.out.println("Context 9: " + OperationContext.get().getOpId());
				    					
				    					try {
				    		            	ctpf.readTo(new OperationCallback() {										
				    							@Override
				    							public void callback() {
				    								//System.out.println("Context 10: " + OperationContext.get().getOpId());
				    								
				    								..println("Download completed!");
				    							}
				    						},
				    						new NullStream());
				    					} 
				    					catch (Exception x) {
				    						..println("Ctp-F Client cb error: " + x);
				    					}
				    					
				    					ctpf.read();		// get that folder listing
				    				}
				    			});
					}
					catch (Exception x) {
						..println("Ctp-F Client error: " + x);
					}
	            
					break;
				}
				case 4: {
					@SuppressWarnings("resource")
					fsd.setRootFolder("/Work/Temp/Dest/x");
						.withFileSet("/cc-logo-sm.png");
							public void callback() {
								//System.out.println("Context 10: " + OperationContext.get().getOpId());
								..println("Upload completed!");
							}
						},
						new FileSourceStream(fsd.select(sel)));
					break;
				}
				}
			}
			catch(Exception x) {
				..println("CLI error: " + x);
			}
		}
	}
New to GrepCode? Check out our FAQ X