Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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());
        }
Пример #3
0
 /// <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);
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
                    }
                }
            }
        }
Пример #7
0
        /// <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());
        }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
 private async Task MsgCallBack(ReceviceMessage revMsg)
 {
     Task.Factory.StartNew(OnRecive, revMsg);
     await Task.CompletedTask;
 }
Пример #10
0
        /// <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);
            }
        }