62 lines
1.9 KiB
Protocol Buffer
62 lines
1.9 KiB
Protocol Buffer
syntax = "proto3";
|
|
package laserweld.ota;
|
|
|
|
option csharp_namespace = "Laserweld.Protos.Ota";
|
|
|
|
// ===== Java / Android 必须的配置 =====
|
|
option java_multiple_files = true;
|
|
option java_package = "com.lxsoft.weld.grpc";
|
|
option java_outer_classname = "OtaProto";
|
|
|
|
import "common.proto";
|
|
|
|
// OTA 服务
|
|
// 当前只包含上传前文件信息登记和文件分片上传
|
|
service OtaService {
|
|
// 更新当前待上传文件的信息
|
|
// 成功后服务端允许开始 UploadPackage
|
|
rpc UpdateFileInfo(UpdateFileInfoRequest) returns (laserweld.common.Result);
|
|
|
|
// 上传 OTA 文件分片
|
|
// 客户端流式上传 服务端在流结束后返回最终结果
|
|
rpc UploadPackage(stream UploadPackageRequest) returns (laserweld.common.Result);
|
|
|
|
// 订阅上传状态
|
|
// 服务端在上传状态变化时主动推送
|
|
rpc SubscribeUploadStatus(SubscribeUploadStatusRequest) returns (stream UploadStatusUpdate);
|
|
|
|
// 开始升级
|
|
// 文件上传并校验通过后 由客户端显式触发升级
|
|
rpc StartUpgrade(StartUpgradeRequest) returns (laserweld.common.Result);
|
|
}
|
|
|
|
// 文件级信息
|
|
// 在真正上传分片前先登记当前文件的描述信息
|
|
message UpdateFileInfoRequest {
|
|
string file_name = 1; // 文件名
|
|
int64 file_size = 2; // 文件总字节数
|
|
int32 total_chunks = 3; // 文件总块数
|
|
string file_md5 = 4; // 文件整包 MD5
|
|
}
|
|
|
|
// 文件分片
|
|
// 每次流消息传一块
|
|
message UploadPackageRequest {
|
|
int32 chunk_index = 1; // 当前块序号 从 0 开始
|
|
int64 offset = 2; // 当前块在整文件中的起始偏移
|
|
bytes chunk_data = 3; // 当前块数据
|
|
}
|
|
|
|
// 上传状态订阅请求
|
|
message SubscribeUploadStatusRequest {}
|
|
|
|
// 上传状态更新
|
|
// status_code 由业务自行扩展定义
|
|
message UploadStatusUpdate {
|
|
int32 status_code = 1; // 上传状态码
|
|
string message = 2; // 状态说明
|
|
}
|
|
|
|
// 开始升级请求
|
|
message StartUpgradeRequest {}
|