/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.convert.ffmpeg.worker; import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; import org.apache.log4j.Logger; import org.jboss.netty.buffer.ChannelBuffer; import com.ttProject.convert.ffmpeg.process.ProcessServer; /** * データを送り込むworker * @author taktod */ public class DataSendWorker implements Runnable { /** 動作ロガー */ private static final Logger logger = Logger.getLogger(DataSendWorker.class); /** 動作サーバー */ private final ProcessServer server; /** 処理開始用のロックオブジェクト */ private final Set<String> keySet; /** 転送データソース */ private final LinkedBlockingQueue<ChannelBuffer> dataQueue; /** 動作フラグ */ private boolean workFlg = true; /** * コンストラクタ * @param server * @param dataQueue */ public DataSendWorker(ProcessServer server, LinkedBlockingQueue<ChannelBuffer> dataQueue) { this.server = server; this.keySet = server.getKeySet(); this.dataQueue = dataQueue; } /** * 停止処理 */ public void stop() { workFlg = false; } /** * 実行部 */ @Override public void run() { try { synchronized(keySet) { // 必要なサーバーからのアクセスが完了したらnotifyされて、実行開始になります。 keySet.wait(); } while(workFlg) { ChannelBuffer buffer = dataQueue.take(); server.sendData(buffer); } } catch (InterruptedException e) { // 処理中断させれただけなので放置します。 } catch (Exception e) { logger.error("想定外の例外が発生しました。", e); } } }