Commit 11c2dcd0 authored by yanzg's avatar yanzg

修改实例化关系

parent e580084a
......@@ -6,28 +6,5 @@ package com.yanzuoguang.media;
*
* @author 颜佐光
*/
public interface MediaCache {
/**
* 获取缓存是否正在执行
*
* @param req 需要运行的请求参数
* @param runnable 当没有运行时,需要执行的函数
* @return
*/
MediaResVo start(MediaReqVo req, Runnable runnable);
/**
* 获取缓存是否正在运行
*
* @param req
* @return
*/
MediaResVo get(MediaReqVo req);
/**
* 写入处理结果到缓存中
*
* @param res
*/
void put(MediaResVo res);
public interface MediaCache extends MediaCacheBase {
}
package com.yanzuoguang.media;
/**
* 视频缓存处理
*
* @author 颜佐光
*/
public interface MediaCacheBase {
/**
* 获取缓存是否正在执行
*
* @param req 需要运行的请求参数
* @param runnable 当没有运行时,需要执行的函数
* @return
*/
MediaResVo start(MediaReqVo req, Runnable runnable);
/**
* 获取缓存是否正在运行
*
* @param req
* @return
*/
MediaResVo get(MediaReqVo req);
/**
* 写入处理结果到缓存中
*
* @param res
*/
void sub(MediaResVo res);
/**
* 锁定临时文件,防止被人修改
*
* @param req
* @param runnable
*/
void lockTempFile(MediaReqVo req, Runnable runnable);
}
package com.yanzuoguang.media;
/**
* 本地缓存实现
*
* @author 颜佐光
*/
public class MediaCacheLocal implements MediaCacheBase {
/**
* 获取缓存是否正在执行
*
* @param req 需要运行的请求参数
* @param runnable 当没有运行时,需要执行的函数
* @return
*/
@Override
public MediaResVo start(MediaReqVo req, Runnable runnable) {
return null;
}
/**
* 获取缓存是否正在运行
*
* @param req
* @return
*/
@Override
public MediaResVo get(MediaReqVo req) {
return null;
}
/**
* 写入处理结果到缓存中
*
* @param res
*/
@Override
public void sub(MediaResVo res) {
}
}
package com.yanzuoguang.media;
import com.yanzuoguang.util.exception.CodeException;
import com.yanzuoguang.util.helper.FileHelper;
import com.yanzuoguang.util.helper.JsonHelper;
import com.yanzuoguang.util.thread.ThreadHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
@Component
public class MediaFirst {
......@@ -14,10 +18,45 @@ public class MediaFirst {
@Autowired(required = false)
private MediaCache cache;
private MediaCacheBase cacheLocal = new MediaCacheLocal();
public MediaFirst() {
}
private MediaCacheBase getCache() {
if (cache != null) {
return cache;
}
return cacheLocal;
}
public MediaFirst(MediaCache cache) {
this.cache = cache;
}
public MediaResVo start(MediaReqVo req) {
MediaResVo res = cache.start(req, new Runnable() {
if (cache == null) {
throw new CodeException("请通过程序编写视频缓存处理对象");
}
// 将临时文件移动到正式文件
cache.lockTempFile(req, new Runnable() {
@Override
public void run() {
File file = getFile(req);
File fileTemp = getFileTemp(req);
FileHelper.createDirectory(file.getParentFile());
if (fileTemp.exists()) {
fileTemp.renameTo(file);
}
}
});
// 通过判断,当没有开启线程运行时,则开启线程运行
MediaResVo res = this.getCache().start(req, new Runnable() {
@Override
public void run() {
// 开始开启线程运行
ThreadHelper.runThread(new Runnable() {
@Override
public void run() {
......@@ -29,6 +68,22 @@ public class MediaFirst {
return res;
}
private File getFile(MediaReqVo req) {
return new File(req.getImageUrl());
}
private File getFileTemp(MediaReqVo req) {
return new File(req.getImageUrl() + ".tmp");
}
private File getDownM3muFile(MediaReqVo req) {
return null;
}
private File getCatTempFile(MediaReqVo req) {
return null;
}
private void handle(MediaReqVo req) {
do {
MediaResVo res = cache.get(req);
......@@ -38,12 +93,31 @@ public class MediaFirst {
break;
}
res.subCount();
cache.put(res);
downM3mu(req);
catImage(req);
// 将下载临时文件移动到临时文件
cache.lockTempFile(req, new Runnable() {
@Override
public void run() {
File catTemp = getCatTempFile(req);
File fileTemp = getFileTemp(req);
if (catTemp.exists()) {
catTemp.renameTo(fileTemp);
}
}
});
// 写入缓存
cache.sub(res);
ThreadHelper.sleep(res.getSplit());
} while (true);
}
private void downM3mu(MediaReqVo req) {
}
private void catImage(MediaReqVo req) {
}
}
package helper;
import com.yanzuoguang.media.MediaFirst;
import com.yanzuoguang.media.MediaReqVo;
import com.yanzuoguang.media.MediaResVo;
import com.yanzuoguang.util.thread.ThreadHelper;
import org.junit.Test;
import java.io.File;
public class MediaFirstTest {
@Test
public void test() {
MediaFirst first = new MediaFirst();
for (int i = 0; i < 1000; i++) {
MediaResVo start = first.start(new MediaReqVo());
File file = new File(start.getImageUrl());
if (file.exists()) {
System.out.println("文件" + file.getAbsolutePath() + "已经存在");
} else {
System.out.println("文件" + file.getAbsolutePath() + "不存在");
}
ThreadHelper.sleep(5000);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment