/// <summary> /// 容器部署 /// </summary> /// <param name="revMsg"></param> /// <returns></returns> public async Task <CreateContainerResponse> CreateContainerAsync(ReceviceMessage revMsg) { string data = Encoding.UTF8.GetString(revMsg.payload); CreateContainerParameters parameters = JsonConvert.DeserializeObject <CreateContainerParameters>(data); var result = await _client.Containers.CreateContainerAsync(parameters); return(result); }
/// <summary> /// 查询容器 /// </summary> /// <param name="revMsg"></param> /// <returns></returns> public async Task <List <ContainerListResponse> > GetContainers(ReceviceMessage revMsg) { string data = Encoding.UTF8.GetString(revMsg.payload); ContainersListParameters parameters = JsonConvert.DeserializeObject <ContainersListParameters>(data); var list = await _client.Containers.ListContainersAsync(parameters); return(list.ToList()); }
/// <summary> /// 拉取镜像 /// </summary> /// <param name="revMsg"></param> /// <returns></returns> public async Task CreateImageAsync(ReceviceMessage revMsg) { string data = Encoding.UTF8.GetString(revMsg.payload); ImagesCreateParameters parameters = JsonConvert.DeserializeObject <ImagesCreateParameters>(data); AuthConfig authConfig = JsonConvert.DeserializeObject <AuthConfig>(data); Progress <JSONMessage> progress = new Progress <JSONMessage>(); await _client.Images.CreateImageAsync(parameters, authConfig, progress); }
public async Task <Stream> ExportContainerAsync(ReceviceMessage revMsg) { string[] topicParam = revMsg.topic.Split('/'); string id = topicParam[topicParam.Length - 2]; var result = await _client.Containers.ExportContainerAsync(id); return(result); }
public async Task <CreateContainerResponse> UpgradeContainerAsync(ReceviceMessage revMsg) { string[] topicParam = revMsg.topic.Split('/'); string id = topicParam[topicParam.Length - 2]; //先停止容器 await _client.Containers.StopContainerAsync(id, new ContainerStopParameters { }); string data = Encoding.UTF8.GetString(revMsg.payload); CreateContainerParameters parameters = JsonConvert.DeserializeObject <CreateContainerParameters>(data); var result = await _client.Containers.CreateContainerAsync(parameters); if (result != null && !string.IsNullOrWhiteSpace(result.ID)) { //移除之前容器 await _client.Containers.RemoveContainerAsync(id, new ContainerRemoveParameters { }); } return(result); }
private async Task ReceivedHandler(MqttApplicationMessageReceivedEventArgs e) { if (e.ApplicationMessage.Payload != null) { ReceviceMessage revMsg = new ReceviceMessage(); revMsg.clientId = e.ClientId; string topic = revMsg.topic = e.ApplicationMessage.Topic; revMsg.payload = e.ApplicationMessage.Payload; Console.WriteLine("接收消息成功topic[" + topic + "]:" + Encoding.UTF8.GetString(revMsg.payload)); var callbackKeys = dicMqMsgCallBack.Keys.Where(p => (p.EndsWith("#") && topic.StartsWith(p.TrimEnd('#').TrimEnd('/')) || p == topic)).ToList(); foreach (var item in callbackKeys) { if (dicMqMsgCallBack[item] != null) { await dicMqMsgCallBack[item](revMsg); } } } }
/// <summary> /// 查询镜像 /// </summary> /// <param name="revMsg"></param> /// <returns></returns> public async Task <List <ImagesListResponse> > GetImages(ReceviceMessage revMsg) { string data = Encoding.UTF8.GetString(revMsg.payload); ImagesListInputParameters parametersInput = JsonConvert.DeserializeObject <ImagesListInputParameters>(data); ImagesListParameters parameters = new ImagesListParameters(); parameters.All = parametersInput.All; if (parametersInput.Filters != null) { parameters.Filters = parametersInput.Filters; } if (!string.IsNullOrWhiteSpace(parametersInput.MatchName)) { parameters.MatchName = parametersInput.MatchName; } var list = await _client.Images.ListImagesAsync(parameters); return(list.ToList()); }
/// <summary> /// mqtt msg /// </summary> /// <param name="data"></param> private void OnRecive(object data) { try { ReceviceMessage msg = data as ReceviceMessage; string[] topicParam = msg.topic.Split('/'); string transId = ""; RequestBase requestdata = JsonConvert.DeserializeObject <RequestBase>(Encoding.UTF8.GetString(msg.payload)); if (requestdata == null || string.IsNullOrWhiteSpace(requestdata.transId)) { transId = Guid.NewGuid().ToString("N"); } else { transId = requestdata.transId; } if (topicParam.Length > 0) { switch (topicParam[topicParam.Length - 1].ToUpper()) { case GetImages: //进行MQTT响应 ResponseBase <List <ImagesListResponse> > responseData = new ResponseBase <List <ImagesListResponse> >(); responseData.code = 200; responseData.message = ""; responseData.transId = transId; try { var resultImages = _dockerSdk.GetImages(msg).Result; responseData.data = resultImages; } catch (Exception e) { responseData.code = 406; responseData.message = e.Message; } string jsondata = JsonConvert.SerializeObject(responseData); byte[] imagesBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ImagesACK, imagesBytes); break; case CreateImages: //进行MQTT响应 ResponseBase responseCreateData = new ResponseBase(); responseCreateData.code = 200; responseCreateData.message = ""; responseCreateData.transId = transId; try { _dockerSdk.CreateImageAsync(msg).Wait(); } catch (Exception e) { responseCreateData.code = 406; responseCreateData.message = e.Message; } string jsonCreatedata = JsonConvert.SerializeObject(responseCreateData); byte[] imagesCreateBytes = Encoding.UTF8.GetBytes(jsonCreatedata); _mQTTNetService.PublicshAsync(DockerTopics.ImagesCreateACK, imagesCreateBytes); break; default: break; } } } catch (Exception ex) { Console.WriteLine("消息处理失败:" + ex.Message); } }
private async Task MsgCallBack(ReceviceMessage revMsg) { Task.Factory.StartNew(OnRecive, revMsg); await Task.CompletedTask; }
/// <summary> /// mqtt msg /// </summary> /// <param name="data"></param> private void OnRecive(object data) { try { bool success = false; ReceviceMessage msg = data as ReceviceMessage; string jsondata = ""; string[] topicParam = msg.topic.Split('/'); string transId = ""; RequestBase requestdata = JsonConvert.DeserializeObject <RequestBase>(Encoding.UTF8.GetString(msg.payload)); if (requestdata == null || string.IsNullOrWhiteSpace(requestdata.transId)) { transId = Guid.NewGuid().ToString("N"); } else { transId = requestdata.transId; } if (topicParam.Length > 0) { switch (topicParam[topicParam.Length - 1].ToUpper()) { case GetContainers: //进行MQTT响应 ResponseBase <List <ContainerListResponse> > responseData = new ResponseBase <List <ContainerListResponse> >(); responseData.code = 200; responseData.message = ""; responseData.transId = transId; try { var containers = _dockerSdk.GetContainers(msg).Result; responseData.data = containers; } catch (Exception ee) { responseData.code = 406; responseData.message = ee.Message; } jsondata = JsonConvert.SerializeObject(responseData); byte[] containersBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ServicesACK, containersBytes); break; case CreateContainer: //进行MQTT响应 ResponseBase <CreateContainerResponse> responseCreateData = new ResponseBase <CreateContainerResponse>(); responseCreateData.code = 200; responseCreateData.message = ""; responseCreateData.transId = transId; try { var createcontainResult = _dockerSdk.CreateContainerAsync(msg).Result; if (createcontainResult != null && !string.IsNullOrWhiteSpace(createcontainResult.ID)) { success = _dockerSdk.StartContainerAsync(createcontainResult.ID).Result; } if (!success) { responseCreateData.code = 406; responseCreateData.message = "容器启动失败,可能主机端口已被占用"; } responseCreateData.data = createcontainResult; } catch (Exception e) { responseCreateData.code = 406; responseCreateData.message = e.Message; } jsondata = JsonConvert.SerializeObject(responseCreateData); byte[] createBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ServicesCreateACK, createBytes); break; case UpgradeContainer: ResponseBase <CreateContainerResponse> responseUpgradeData = new ResponseBase <CreateContainerResponse>(); responseUpgradeData.code = 200; responseUpgradeData.message = ""; responseUpgradeData.transId = transId; try { var upgradecontainResult = _dockerSdk.UpgradeContainerAsync(msg).Result; if (upgradecontainResult != null && !string.IsNullOrWhiteSpace(upgradecontainResult.ID)) { success = _dockerSdk.StartContainerAsync(upgradecontainResult.ID).Result; } if (!success) { responseUpgradeData.code = 406; responseUpgradeData.message = "容器启动失败,可能主机端口已被占用"; } //进行MQTT响应 responseUpgradeData.data = upgradecontainResult; } catch (Exception ex) { responseUpgradeData.code = 406; responseUpgradeData.message = ex.Message; } jsondata = JsonConvert.SerializeObject(responseUpgradeData); byte[] upgradeBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ServicesUpgradeACK, upgradeBytes); break; case ExportContainer: _dockerSdk.ExportContainerAsync(msg); //暂不实现 break; case StartContainer: ResponseBase responseStartData = new ResponseBase(); responseStartData.code = 200; responseStartData.message = ""; responseStartData.transId = transId; try { string id = topicParam[topicParam.Length - 2]; success = _dockerSdk.StartContainerAsync(id).Result; if (!success) { responseStartData.code = 406; responseStartData.message = "容器启动失败,可能主机端口已被占用"; } } catch (Exception ex) { responseStartData.code = 406; responseStartData.message = ex.Message; } jsondata = JsonConvert.SerializeObject(responseStartData); byte[] startBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ServicesStartACK, startBytes); break; case StopContainer: ResponseBase responseStopData = new ResponseBase(); responseStopData.code = 200; responseStopData.message = ""; responseStopData.transId = transId; try { string id = topicParam[topicParam.Length - 2]; success = _dockerSdk.StopContainerAsync(id).Result; if (!success) { responseStopData.code = 406; responseStopData.message = "容器停止失败"; } } catch (Exception ex) { responseStopData.code = 406; responseStopData.message = ex.Message; } jsondata = JsonConvert.SerializeObject(responseStopData); byte[] stopBytes = Encoding.UTF8.GetBytes(jsondata); _mQTTNetService.PublicshAsync(DockerTopics.ServicesStopACK, stopBytes); break; default: break; } } } catch (Exception ex) { Console.WriteLine("消息处理失败:" + ex.Message); } }