updated private cloud functions

This commit is contained in:
strawmanbobi
2025-10-29 08:59:13 +08:00
parent 7d8c328813
commit fd05f74cca
10 changed files with 133 additions and 43 deletions

View File

@@ -95,4 +95,5 @@ fabric.properties
# Customized ignore files # Customized ignore files
target target
private-backend.iml
private-server.iml private-server.iml

View File

@@ -1,19 +1,19 @@
# IRext private server # IRext Private Backend
Private server is a runtime that any user can deploy and access it with IRext restful web service call or SDK. Private server is a runtime that any user can deploy and access it with IRext restful web service call or SDK.
### Runtime environment ### Runtime environment
- Java runtime 1.7 or above - Java runtime 1.7 or above
- Mysql server 5.6 or above - Mysql server 8.0 or above
- Redis service - Redis server 4.0 or above
- A Linux OS is preferred - A Linux OS is preferred
### Deploy ### Deploy
- Fetch or compile libirdecode_jni.so out of source code of irext/core. - Fetch or compile libirdecode_jni.so out of source code of irext/core.
- Run following command when you fetched or compiled the private-server.jar out of the private server Spring-Boot project. - Run following command when you fetched or compiled the private-backend-<version>.jar out of the private server Spring-Boot project.
```shell script ```shell script
java -jar private-server.jar java -jar private-backend-<version>.jar
``` ```

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>net.irext.server</groupId> <groupId>net.irext.server</groupId>
<artifactId>private-server</artifactId> <artifactId>private-backend</artifactId>
<version>1.5.0</version> <version>1.5.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -6,9 +6,11 @@ import net.irext.server.request.CreateRemoteReferenceRequest;
import net.irext.server.utils.Constants; import net.irext.server.utils.Constants;
import net.irext.server.mapper.*; import net.irext.server.mapper.*;
import net.irext.server.model.*; import net.irext.server.model.*;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -199,7 +201,7 @@ public class IndexingLogic {
remoteRef.setBrandName(brandName); remoteRef.setBrandName(brandName);
remoteRef.setCityCode(remoteIndex.getCityCode()); remoteRef.setCityCode(remoteIndex.getCityCode());
remoteRef.setOperatorId(remoteIndex.getOperatorId()); remoteRef.setOperatorId(remoteIndex.getOperatorId());
remoteRef.setRemoteCode(remoteIndex.getId().toString()); remoteRef.setRemoteCode("");
remoteRef.setRemote(remoteIndex.getRemote()); remoteRef.setRemote(remoteIndex.getRemote());
remoteRef.setProtocol(remoteIndex.getProtocol()); remoteRef.setProtocol(remoteIndex.getProtocol());
remoteRef.setRemoteMap(remoteIndex.getRemoteMap()); remoteRef.setRemoteMap(remoteIndex.getRemoteMap());
@@ -220,11 +222,29 @@ public class IndexingLogic {
.url(url) .url(url)
.post(body) .post(body)
.build(); .build();
Response response = client.newCall(request).execute();
return response.body().string(); client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
System.err.println("remoteRef request failed: " + e.getMessage());
}
@Override
public void onResponse(Response response) throws IOException {
try {
if (!response.isSuccessful()) {
throw new IOException("unexpected code from remoteRef response: " + response);
}
} catch (Exception e) {
System.err.println("error processing remoteRef response: " + e.getMessage());
}
}
});
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
} }

View File

@@ -32,7 +32,7 @@ public class Constants {
public static final int STATUS_INVALID = 0; public static final int STATUS_INVALID = 0;
public static final int STATUS_PARA_DATA = 15; public static final int STATUS_PARA_DATA = 15;
public static final String REMOTE_REF_URL = "http://192.168.75.128:8083/irext-server/remote_ref/create_remote_ref"; public static final String REMOTE_REF_URL = "http://srv.irext.net/irext-server/remote_ref/create_remote_ref";
public enum CategoryID { public enum CategoryID {
AIR_CONDITIONER(1), AIR_CONDITIONER(1),

View File

@@ -13,7 +13,6 @@ app.post('/irext/int/list_categories', intService.listCategories);
app.post('/irext/int/list_brands', intService.listBrands); app.post('/irext/int/list_brands', intService.listBrands);
app.post('/irext/int/list_indexes', intService.listIndexes); app.post('/irext/int/list_indexes', intService.listIndexes);
app.post('/irext/int/list_ir_protocols', intService.listIRProtocols); app.post('/irext/int/list_ir_protocols', intService.listIRProtocols);
app.post('/irext/int/download_bin', intService.downloadIndex);
app.post('/irext/int/list_unpublished_brands', intService.listUnpublishedBrands); app.post('/irext/int/list_unpublished_brands', intService.listUnpublishedBrands);
app.post('/irext/int/list_unpublished_remote_indexes', intService.listUnpublishedRemoteIndexes); app.post('/irext/int/list_unpublished_remote_indexes', intService.listUnpublishedRemoteIndexes);

View File

@@ -233,26 +233,6 @@ exports.searchRemoteIndexes = function (req, res) {
}); });
}; };
/*
* function : Download remote binary by post request
* parameter : remote index ID
* return : Redirect to binary download
*/
exports.downloadIndex = function (req, res) {
let remoteIndexID = req.body.index_id;
internalLogic.downloadRemoteBinCachedWorkUnit(remoteIndexID, function (serveBinErr, filePath) {
if (errorCode.SUCCESS.code === serveBinErr.code) {
logger.info("download file located at " + filePath);
res.download(filePath, "");
} else {
logger.info("download file failed");
res.write('');
res.end();
}
});
};
/* /*
* function : Download remote binary * function : Download remote binary
* parameter : remote index ID * parameter : remote index ID
@@ -260,8 +240,10 @@ exports.downloadIndex = function (req, res) {
*/ */
exports.downloadRemoteIndex = function (req, res) { exports.downloadRemoteIndex = function (req, res) {
let remoteIndexID = req.query.remote_index_id; let remoteIndexID = req.query.remote_index_id;
let adminId = req.query.admin_id;
let token = req.query.token;
internalLogic.downloadRemoteBinCachedWorkUnit(remoteIndexID, function (serveBinErr, filePath) { internalLogic.downloadRemoteBinCachedWorkUnit(adminId, token, remoteIndexID, function (serveBinErr, filePath) {
if (errorCode.SUCCESS.code === serveBinErr.code) { if (errorCode.SUCCESS.code === serveBinErr.code) {
logger.info("download file located at " + filePath); logger.info("download file located at " + filePath);
res.download(filePath, ""); res.download(filePath, "");

View File

@@ -63,25 +63,25 @@
<hr> <hr>
<div> <div>
<div class="btn-group" role="group" aria-label="..."> <div class="btn-group" role="group" aria-label="...">
<button class="btn btn-normal btn-default" onclick="loadRemoteList();" style="font-size: 14px;"> <button class="btn btn-normal" onclick="loadRemoteList();" style="font-size: 14px;">
<span class="glyphicon glyphicon-refresh" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-refresh" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button class="btn btn-normal btn-default" onclick="onCreateRemote();" style="font-size: 14px;"> <button class="btn btn-normal" onclick="onCreateRemote();" style="font-size: 14px;">
<span class="glyphicon glyphicon-plus" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-plus" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button class="btn btn-normal btn-danger" onclick="onDeleteRemote();" style="font-size: 14px;"> <button class="btn btn-normal" onclick="onDeleteRemote();" style="font-size: 14px;">
<span class="glyphicon glyphicon-trash" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-trash" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button class="btn btn-normal btn-warning" onclick="onFallbackRemote();" style="font-size: 14px;"> <button class="btn btn-normal" onclick="onFallbackRemote();" style="font-size: 14px;">
<span class="glyphicon glyphicon-arrow-left" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-arrow-left" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button class="btn btn-normal btn-warning" onclick="onVerifyRemote(1);" style="font-size: 14px;"> <button class="btn btn-normal" onclick="onVerifyRemote(1);" style="font-size: 14px;">
<span class="glyphicon glyphicon-remove" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-remove" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button class="btn btn-normal btn-warning" onclick="onVerifyRemote(0);" style="font-size: 14px;"> <button class="btn btn-normal" onclick="onVerifyRemote(0);" style="font-size: 14px;">
<span class="glyphicon glyphicon-ok" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-ok" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
<button id="download_bin_button" class="btn btn-normal btn-info" onclick="downloadBin();" style="font-size: 14px;"> <button class="btn btn-normal btn-info" onclick="downloadBin();" style="font-size: 14px;" id="download_bin_button" >
<span class="glyphicon glyphicon-cloud-download" style="vertical-align:middle; margin-bottom: 3px;"></span> <span class="glyphicon glyphicon-cloud-download" style="vertical-align:middle; margin-bottom: 3px;"></span>
</button> </button>
</div> </div>

View File

@@ -40,9 +40,10 @@ let adminAuth = new AdminAuth(REDIS_HOST, REDIS_PORT, null, REDIS_PASSWORD);
// relative XML file path // relative XML file path
let PROTOCOL_PATH = "protocol"; let PROTOCOL_PATH = "protocol";
let contributeProtocolService = "/irext-server/contribute/contribute_protocol"; let contributeProtocolService = "/irext-server/contribution/contribute_protocol";
let contributeBrandsService = "/irext-server/contribution/contribute_brands"; let contributeBrandsService = "/irext-server/contribution/contribute_brands";
let contributeRemoteIndexesService = "/irext-server/contribution/contribute_remote_indexes"; let contributeRemoteIndexesService = "/irext-server/contribution/contribute_remote_indexes";
let createRemoteRefService = "/irext-server/remote_ref/create_remote_ref";
exports.listCategoriesWorkUnit = function (lang, from, count, callback) { exports.listCategoriesWorkUnit = function (lang, from, count, callback) {
let conditions = { let conditions = {
@@ -331,7 +332,7 @@ exports.searchRemoteIndexesWorkUnit = function (lang, remoteMap, from, count, ca
}); });
}; };
exports.downloadRemoteBinCachedWorkUnit = function (remoteIndexID, callback) { exports.downloadRemoteBinCachedWorkUnit = function (adminId, token, remoteIndexID, callback) {
RemoteIndex.getRemoteIndexByID(remoteIndexID, function (getRemoteIndexErr, remoteIndex) { RemoteIndex.getRemoteIndexByID(remoteIndexID, function (getRemoteIndexErr, remoteIndex) {
if (errorCode.SUCCESS.code === getRemoteIndexErr.code && null != remoteIndex) { if (errorCode.SUCCESS.code === getRemoteIndexErr.code && null != remoteIndex) {
let fileName = "irda_" + remoteIndex.protocol + "_" + remoteIndex.remote + ".bin"; let fileName = "irda_" + remoteIndex.protocol + "_" + remoteIndex.remote + ".bin";
@@ -342,6 +343,93 @@ exports.downloadRemoteBinCachedWorkUnit = function (remoteIndexID, callback) {
fs.exists(localBinFileName, function (exists) { fs.exists(localBinFileName, function (exists) {
if (exists) { if (exists) {
logger.info("file " + localBinFileName + " already exists, serve directly"); logger.info("file " + localBinFileName + " already exists, serve directly");
// create remote reference of this remote index
let categoryId = 0;
let categoryName = '';
let brandId = 0;
let brandName = '';
let name = '';
let remoteRef = null;
RemoteIndex.getRemoteIndexByID(remoteIndexID, function (getRemoteIndexErr, remoteIndex) {
if (errorCode.SUCCESS.code === getRemoteIndexErr.code) {
categoryId = remoteIndex.category_id;
brandId = remoteIndex.brand_id;
Category.getCategoryByID(categoryId, function (getCategoryErr, category) {
if (errorCode.SUCCESS.code === getCategoryErr.code) {
categoryName = category.name;
if (enums.CATEGORY_STB !== categoryId) {
Brand.getBrandByID(brandId, function (getBrandErr, brand) {
if (errorCode.SUCCESS.code === getBrandErr.code) {
brandName = brand.name;
name = brandName + categoryName;
remoteRef = {
"name": name,
"categoryId": categoryId,
"categoryName": categoryName,
"brandId": brandId,
"brandName": brandName,
"cityCode": "",
"operatorId": 0,
"remoteCode": "",
"subCate": remoteIndex.sub_cate,
"protocol": remoteIndex.protocol,
"remote": remoteIndex.remote,
"remoteMap": remoteIndex.remote_map,
}
let queryParams = new Map();
let requestSender =
new RequestSender(EXTERNAL_SERVER_ADDRESS,
EXTERNAL_SERVER_PORT,
createRemoteRefService,
queryParams);
let createRemoteRefRequest = {
"id": adminId,
"token": token,
"remoteRef": remoteRef,
};
requestSender.sendPostRequest(createRemoteRefRequest,
function (createRemoteRefErr, createRemoteRefResponse) {
logger.info(createRemoteRefErr);
});
}
});
} else {
name = categoryName + "-" + remoteIndex.city_code + "-" + remoteIndex.operator_id;
remoteRef = {
"name": name,
"categoryId": categoryId,
"categoryName": categoryName,
"brandId": 0,
"brandName": "",
"cityCode": remoteIndex.city_code,
"operatorId": remoteIndex.operator_id,
"remoteCode": "",
"subCate": remoteIndex.sub_cate,
"protocol": remoteIndex.protocol,
"remote": remoteIndex.remote,
"remoteMap": remoteIndex.remote_map,
}
let queryParams = new Map();
let requestSender =
new RequestSender(EXTERNAL_SERVER_ADDRESS,
EXTERNAL_SERVER_PORT,
createRemoteRefService,
queryParams);
let createRemoteRefRequest = {
"id": adminId,
"token": token,
"remoteRef": remoteRef,
};
requestSender.sendPostRequest(createRemoteRefRequest,
function (createRemoteRefErr, createRemoteRefResponse) {
logger.info(createRemoteRefErr);
});
}
}
});
}
});
callback(error, localBinFileName); callback(error, localBinFileName);
} else { } else {
logger.info("file " + localBinFileName + " does not exist"); logger.info("file " + localBinFileName + " does not exist");
@@ -848,7 +936,7 @@ exports.publishBrandsWorkUnit = function (adminID, callback) {
function (contributeBrandsRequestErr, contributeBrandsResponse) { function (contributeBrandsRequestErr, contributeBrandsResponse) {
logger.info(contributeBrandsRequestErr); logger.info(contributeBrandsRequestErr);
callback(errorCode.SUCCESS); callback(errorCode.SUCCESS);
}); });
callback(errorCode.SUCCESS); callback(errorCode.SUCCESS);
}); });
} else { } else {