Пример #1
0
        private void DeployCommand(MessageBody messageBody)
        {
            AssemblyExcuteEnvironment.Current.UnloadDomain(excuteDomainKey);
            var    file1 = FileTask.GetObjectBySerializeString(messageBody.Datas);
            string datas = TinctSlaveNode.Current.NodeInfo.NodeName;

            try
            {
                File.WriteAllBytes(file1.FileName, file1.Content.ToArray());
                datas += ",true";
            }
            catch
            {
                //write failed
                datas += ",false";
            }
            TinctMessage message = new TinctMessage();

            message.MessageHeader = new MessageHeader()
            {
                CommandType = CommandType.Deploy
            };
            MessageBody body = new MessageBody();

            message.MessageBody = body;
            TinctSlaveNode.Current.SendMessage(TinctNodeCongratulations.MasterName, message);
        }
Пример #2
0
        public bool SendMessage(string machineName, TinctMessage message)
        {
            PackageMessage pmsg = new PackageMessage();

            pmsg.SourceName      = NodeInfo.NodeName;
            pmsg.DestinationName = machineName;
            pmsg.SendTimeStamp   = DateTimeExtension.GetTimeStamp();
            pmsg.Message         = message;
            return(SendMessage(machineName, masterPort, pmsg));
        }
Пример #3
0
        private TinctMessage BuildTaskMessage(TinctTask tinctTask, CommandType type)
        {
            TinctMessage tmsg = new TinctMessage();

            tmsg.MessageHeader = new MessageHeader()
            {
                CommandType = type
            };
            tmsg.MessageBody       = new MessageBody();
            tmsg.MessageBody.Datas = tinctTask.ToJsonSerializeString();
            return(tmsg);
        }
Пример #4
0
        public bool HanderMessage(TinctMessage message)
        {
            switch (message.MessageHeader.CommandType)
            {
            case CommandType.Return:
                new Task(() => { ReturnCommand(message.MessageBody); }).Start();
                break;

            case CommandType.Deploy:
                // new Task(() => { DeployCommand(message.MessageBody); }).Start();
                break;
            }

            return(true);
        }
Пример #5
0
 public static void StartSlaveService(string loggerName, string loggerFileName)
 {
     if (!slaveServiceIsOn)
     {
         TinctMessage msg = new TinctMessage();
         msg.MessageBody       = new MessageBody();
         msg.MessageBody.Datas = "connect";
         var slavehandler = new TinctMessageSlaveHandler();
         slavehandler.LoggerName     = loggerName;
         slavehandler.loggerFileName = loggerFileName;
         TinctSlaveNode.Current.MessageHandlers.Add(slavehandler);
         TinctSlaveNode.Current.StartSlave();
         TinctSlaveNode.Current.SendMessage(TinctNodeCongratulations.MasterName, msg);
         slaveServiceIsOn = true;
     }
 }
Пример #6
0
        public bool HanderMessage(TinctMessage message)
        {
            try
            {
                var deploycontent = DeployContent.GetObjectBySerializeString(message.MessageBody);
                if (deploycontent.FileName == null)
                {
                    return(true);
                }

                foreach (var appdomain in ExcuteEnvironment.Current.AppDomainDicts)
                {
                    try
                    {
                        AppDomain.Unload(appdomain.Value);
                    }
                    catch
                    {
                    }
                }
                ExcuteEnvironment.Current.AppDomainDicts.Clear();

                try
                {
                    File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + "//" + deploycontent.FileName, deploycontent.Content);
                    deploycontent.Status = "Completed";
                }
                catch
                {
                    deploycontent.Status = "Failed";
                    TinctSlaveNode.Current.NodeInfo.Status = NodeStatus.DeployFailed;
                }
                // deploycontent.TargetNodeName =Dns.GetHostName();

                //TinctSlaveNode.Current.(TinctSlaveNode.Current.NodeInfo.ToJsonSerializeString(), masterName);
                //TinctSlaveNode.Current.SendMessageToMaster(deploycontent.ToJsonSerializeString(), masterName);
            }
            catch
            {
                return(true);
            }

            return(false);
        }
Пример #7
0
        public bool HanderMessage(TinctMessage message)
        {
            var deploycontent = DeployContent.GetObjectBySerializeString(message.MessageBody);

            if (deploycontent.FileName == null)
            {
                return(true);
            }
            else
            {
                var node = NodeRepository.Current.NodeInfoList.FirstOrDefault(t => t.NodeName == deploycontent.TargetNodeName);
                if (deploycontent.Status == "Failed")
                {
                    node.Status = NodeStatus.DeployFailed;
                }
                else
                {
                    node.Status = NodeStatus.Running;
                }
            }

            return(false);
        }
Пример #8
0
        public bool HanderMessage(TinctMessage message)
        {
            switch (message.MessageHeader.CommandType)
            {
            case CommandType.Run:
                new Task(() => { RunCommand(message.MessageBody); }).Start();
                break;

            case CommandType.Search: break;

            case CommandType.Cancel:
                new Task(() => { CancelCommand(message.MessageBody); }).Start();
                break;

            case CommandType.SyncTask: SyncTaskCommand(message.MessageBody); break;

            case CommandType.Deploy:
                DeployCommand(message.MessageBody);
                break;
            }

            return(true);
        }
Пример #9
0
        public void ReceviceMessageTest()
        {
            TinctSlaveNode slavePoint = new TinctSlaveNode();
            var            handler    = new TestMessageHandler();

            slavePoint.MessageHandlers.Add(handler);
            bool result = slavePoint.StartSlave();

            TinctMessage msg = new TinctMessage();

            msg.MessageBody       = new MessageBody();
            msg.MessageBody.Datas = "test";

            TinctMasterNode sendPoint = new TinctMasterNode();

            sendPoint.SendMessage(slavePoint.NodeInfo.NodeName, msg);

            Thread.Sleep(1000);


            //msg.MessageBody = "test1";
            sendPoint.SendMessage(slavePoint.NodeInfo.NodeName, msg);
            Assert.IsTrue(handler.Message == "test");
        }
Пример #10
0
        public static void DeployFile(FileTask file)
        {
            var bytes = File.ReadAllBytes(file.SourcePath);

            file.Content.AddRange(bytes);
            TinctMessage msg = new TinctMessage();

            msg.MessageHeader             = new MessageHeader();
            msg.MessageHeader.CommandType = CommandType.Deploy;
            msg.MessageBody       = new MessageBody();
            msg.MessageBody.Datas = file.ToJsonSerializeString();
            TinctTaskRepository.Current.ClearAllTinctTasks();
            for (int i = 0; i < TinctMasterNode.Current.SlaveNodes.Count; i++)
            {
                try
                {
                    TinctMasterNode.Current.SendMessage(TinctMasterNode.Current.SlaveNodes[i].NodeName, msg);
                }
                catch
                {
                    ///when change salve node status,ingore that
                }
            }
        }
Пример #11
0
        public void ExuteTask(string datas, string loggerName, string loggerFileName)
        {
            var logger = TinctLoggerManger.GetLogger(loggerName, loggerFileName);
            var task   = TinctTask.GetObjectBySerializeString(datas);

            if (logger != null)
            {
                logger.LogMessage(task.ToJsonSerializeString());
            }
            AssemblyExcuteEnvironment.Current.AppDomainDicts.TryGetValue(task.ClassName + "\\" + task.MethodName, out AppDomain runTimeActionDomain);
            if (runTimeActionDomain == null)
            {
                runTimeActionDomain = AppDomain.CreateDomain(task.ClassName + "\\" + task.MethodName, AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);
                AssemblyExcuteEnvironment.Current.AppDomainDicts.TryAdd(runTimeActionDomain.FriendlyName, runTimeActionDomain);
            }
            try
            {
                dynamic controler = runTimeActionDomain.CreateInstanceFrom(task.DllName + ".dll", task.NamespaceName + "." + task.ClassName).Unwrap();

                MethodInfo method         = controler.GetType().GetMethod(task.MethodName);
                int        parametercount = method.GetParameters().Count();
                if (parametercount == 0)
                {
                    method.Invoke(controler, null);
                }
                else
                {
                    method.Invoke(controler, new object[] { task.Datas });
                }

                task.Status = TinctTaskStatus.Completed;
            }
            catch (AppDomainUnloadedException e)
            {
                Console.WriteLine(e);
                //log
                task.Status = TinctTaskStatus.Exception;

                task.Exption         = e;
                task.HasException    = true;
                task.ExceptionString = e.ToString();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                //log
                task.Status          = TinctTaskStatus.Exception;
                task.Exption         = e;
                task.HasException    = true;
                task.ExceptionString = e.ToString();
            }

            AssemblyExcuteEnvironment.Current.UnloadDomain(runTimeActionDomain.FriendlyName);
            task.EndTime = DateTimeExtension.GetTimeStamp();
            if (logger != null)
            {
                logger.LogMessage(task.ToJsonSerializeString());
            }
            TinctMessage message = new TinctMessage();

            message.MessageHeader = new MessageHeader()
            {
                CommandType = CommandType.Return
            };
            MessageBody body = new MessageBody();

            body.Datas          = task.ToJsonSerializeString();
            message.MessageBody = body;

            TinctSlaveNode.Current.SendMessage(TinctNodeCongratulations.MasterName, message);
        }
Пример #12
0
 public bool HanderMessage(TinctMessage message)
 {
     Message = message.MessageBody.Datas;
     return(true);
 }