package com.vci.dbsync.filesync;
|
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.volumn.method.VolumnManagement;
|
import com.vci.dbsync.entity.VMInfo;
|
import com.vci.dbsync.log.SyncLog;
|
|
public class FileSync {
|
private VMInfo _srcVMInfo;
|
private ORBHelper _srcORB = null;
|
private VolumnManagement _vmSrc = null;
|
|
private VMInfo _destVMInfo;
|
private ORBHelper _destORB = null;
|
private VolumnManagement _vmDest = null;
|
private int _blocksize = 32;
|
|
private int _count = 0;
|
|
|
public FileSync(VMInfo src, VMInfo dest){
|
_srcVMInfo = src;
|
_destVMInfo = dest;
|
}
|
|
public boolean Init(boolean forward) throws VCIError {
|
try {
|
if (forward) // 正向
|
{
|
_srcORB = new ORBHelper();
|
_srcORB.InitORB(_srcVMInfo.getUrl(), _srcVMInfo.getIdentity());
|
|
_destORB = new ORBHelper();
|
_destORB.InitORB(_destVMInfo.getUrl(), _destVMInfo.getIdentity());
|
|
_vmSrc = _srcORB.getVolumnService(_srcVMInfo.getService());
|
_vmDest = _destORB.getVolumnService(_destVMInfo.getService());
|
|
}
|
else // 反向
|
{
|
_srcORB = new ORBHelper();
|
_srcORB.InitORB(_destVMInfo.getUrl(), _destVMInfo.getIdentity());
|
|
_destORB = new ORBHelper();
|
_destORB.InitORB(_srcVMInfo.getUrl(), _srcVMInfo.getIdentity());
|
|
|
_vmSrc = _srcORB.getVolumnService(_destVMInfo.getService());
|
_vmDest = _destORB.getVolumnService(_srcVMInfo.getService());
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
if (e instanceof VCIError) {
|
throw (VCIError)e;
|
}
|
throw(new VCIError(e.getLocalizedMessage(),new String[]{"Init File Sync Exception"}));
|
//throw new VCIError("uploadFileToVolume", new String[0]);
|
}
|
|
return true;
|
}
|
|
public void close(){
|
if (_srcORB != null)
|
_srcORB.close();
|
_srcORB = null;
|
|
if (_destORB != null)
|
_destORB.close();
|
_destORB = null;
|
}
|
|
/**
|
* 上传文件到指定的卷
|
* @param volName
|
* @param ownBizOBJType
|
* @param ownBizOBJOid
|
* @param localFilePath
|
* @return
|
* @throws VCIError
|
*/
|
public boolean syncFile(String volFile) {
|
|
try
|
{
|
String srcFile = _srcORB.getFilePath(volFile);
|
String destFile = _destORB.getFilePath(volFile);
|
|
if (!_vmSrc.isFileExist(srcFile))
|
return false;
|
|
long fileSize = _vmSrc.getFileSize(srcFile);
|
if (fileSize == 0)
|
return false;
|
|
|
long curTime = _vmSrc.getCurrrentTimeMillions();
|
|
int blockSize = _blocksize * 1024;
|
byte[] buffer = new byte[blockSize];
|
|
long offset = 0;
|
|
while (offset < (fileSize - blockSize))
|
{
|
buffer = _vmSrc.sendFile(srcFile, offset);
|
|
_vmDest.receiveFile(destFile, buffer, offset, curTime, fileSize);
|
offset += blockSize;
|
}
|
|
long remainSize = fileSize - offset;
|
if (remainSize > 0)
|
{
|
buffer = new byte[(int)remainSize];
|
buffer = _vmSrc.sendFile(srcFile, offset);
|
_vmDest.receiveFile(destFile, buffer, offset, curTime, fileSize);
|
}
|
|
_count++;
|
|
return true;
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
SyncLog.logger.error("同步文件异常:" + volFile);
|
SyncLog.logger.error(e);
|
|
return false;
|
|
// if (e instanceof VCIError) {
|
// throw (VCIError)e;
|
// }
|
// throw(new VCIError(e.getMessage(), new String[]{"Sync File Exception", volFile}));
|
//throw new VCIError("uploadFileToVolume", new String[0]);
|
}
|
}
|
|
public int getCount() {
|
return _count;
|
}
|
|
}
|