Esempio n. 1
0
        /// <summary>
        /// TCP 客户端套接字初始化处理
        /// </summary>
        /// <param name="parameter"></param>
        private void onClientSocket(AutoCSer.Net.TcpServer.ClientSocketEventParameter parameter)
        {
            try
            {
                if (parameter.Type == AutoCSer.Net.TcpServer.ClientSocketEventParameter.EventType.SetSocket)
                {
                    try
                    {
                        if (logKeepCallback != null)
                        {
                            logKeepCallback.Dispose();
                            logKeepCallback = null;
                        }
#if NoAutoCSer
                        throw new Exception();
#else
                        ClientId        = TcpInternalClient.register();
                        logKeepCallback = TcpInternalClient.getLog(ClientId, onLog);
#endif
                        IsClient = true;
                        return;
                    }
                    catch (Exception error)
                    {
                        AutoCSer.Log.Pub.Log.Add(AutoCSer.Log.LogType.Error, error);
                        checkSocketVersion.DisposeSocket();
                    }
                    IsClient = false;
                }
            }
            finally
            {
                Client.OnClient(parameter.Type, name);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// TCP 客户端套接字初始化处理
        /// </summary>
        /// <param name="socket"></param>
        private void onClientSocket(AutoCSer.Net.TcpServer.ClientSocket socket)
        {
            Monitor.Enter(newSocketLock);
            try
            {
                if (socket.IsSocketVersion(ref this.socket))
                {
                    try
                    {
                        if (logKeepCallback != null)
                        {
                            logKeepCallback.Dispose();
                            logKeepCallback = null;
                        }
#if NoAutoCSer
                        throw new Exception();
#else
                        ClientId        = TcpInternalClient.register();
                        logKeepCallback = TcpInternalClient.getLog(ClientId, onLog);
#endif
                        IsClient = true;
                        Client.OnClient(name);
                        return;
                    }
                    catch (Exception error)
                    {
                        AutoCSer.Log.Pub.Log.add(AutoCSer.Log.LogType.Error, error);
                        socket.Socket.Dispose();
                    }
                    IsClient = false;
                }
            }
            finally { Monitor.Exit(newSocketLock); }
        }
Esempio n. 3
0
        /// <summary>
        /// 启动部署
        /// </summary>
        /// <param name="startTime">部署任务启动时间</param>
        /// <returns>部署结果</returns>
        internal DeployResult Deploy(DateTime startTime = default(DateTime))
        {
#if NoAutoCSer
            throw new Exception();
#else
            if (TcpClient.IsClient)
            {
                //AutoCSer.Net.IndexIdentity identity = TcpClient.TcpInternalClient.create(TcpClient.ClientId);
                AutoCSer.Net.IndexIdentity identity = TcpClient.TcpInternalClient.create();
                bool isClear = false;
                try
                {
                    Client client = TcpClient.Client;
                    Dictionary <HashString, FileSource> fileSources = DictionaryCreator.CreateHashString <FileSource>();
                    ClientTaskInfo[] tasks = new ClientTaskInfo[Tasks.Length];
                    for (int taskIndex = 0; taskIndex != Tasks.Length; ++taskIndex)
                    {
                        switch (Tasks[taskIndex].Type)
                        {
                        case TaskType.Run:
                            appendSource(fileSources, (ClientTask.Run)Tasks[taskIndex], ref tasks[taskIndex]);
                            break;

                        case TaskType.AssemblyFile:
                            appendSource(fileSources, (ClientTask.WebFile)Tasks[taskIndex], ref tasks[taskIndex]);
                            break;

                        case TaskType.File:
                            ClientTask.File file            = (ClientTask.File)Tasks[taskIndex];
                            DirectoryInfo   clientDirectory = new DirectoryInfo(file.ClientPath);
                            Directory       directory       = Directory.Create(clientDirectory, client.Config.FileLastWriteTime, file.SearchPatterns);
                            tasks[taskIndex].Directory = TcpClient.TcpInternalClient.getFileDifferent(directory, file.ServerPath);
                            tasks[taskIndex].Directory.Load(clientDirectory);
                            break;

                        case TaskType.WebFile:
                            ClientTask.WebFile webFile            = (ClientTask.WebFile)Tasks[taskIndex];
                            DirectoryInfo      webClientDirectory = new DirectoryInfo(webFile.ClientPath);
                            Directory          webDirectory       = Directory.CreateWeb(webClientDirectory, client.Config.FileLastWriteTime);
                            tasks[taskIndex].Directory = TcpClient.TcpInternalClient.getFileDifferent(webDirectory, webFile.ServerPath);
                            tasks[taskIndex].Directory.Load(webClientDirectory);
                            break;
                        }
                    }

                    if (fileSources.Count != 0 && !TcpClient.TcpInternalClient.setFileSource(identity, fileSources.getArray(value => value.Value.Data)))
                    {
                        return(new DeployResult {
                            Index = -1, State = DeployState.SetFileSourceError
                        });
                    }
                    for (int taskIndex = 0; taskIndex != Tasks.Length; ++taskIndex)
                    {
                        switch (Tasks[taskIndex].Type)
                        {
                        case TaskType.Run:
                            if ((tasks[taskIndex].TaskIndex = TcpClient.TcpInternalClient.addRun(identity, tasks[taskIndex].FileIndexs.ToArray(), (ClientTask.Run)Tasks[taskIndex])) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddRunError
                                });
                            }
                            break;

                        case TaskType.WebFile:
                        case TaskType.File:
                            if (TcpClient.TcpInternalClient.addFiles(identity, tasks[taskIndex].Directory, (ClientTask.WebFile)Tasks[taskIndex], Tasks[taskIndex].Type) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddFileError
                                });
                            }
                            break;

                        case TaskType.AssemblyFile:
                            if (TcpClient.TcpInternalClient.addAssemblyFiles(identity, tasks[taskIndex].FileIndexs.ToArray(), (ClientTask.AssemblyFile)Tasks[taskIndex]) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddAssemblyFileError
                                });
                            }
                            break;

                        case TaskType.WaitRunSwitch:
                            if (TcpClient.TcpInternalClient.addWaitRunSwitch(identity, tasks[((ClientTask.WaitRunSwitch)Tasks[taskIndex]).TaskIndex].TaskIndex) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddWaitRunSwitchError
                                });
                            }
                            break;

                        case TaskType.Custom:
                            if (TcpClient.TcpInternalClient.addCustom(identity, (ClientTask.Custom)Tasks[taskIndex]) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddCustomError
                                });
                            }
                            break;
                        }
                    }
                    AutoCSer.Net.TcpServer.ReturnValue <AutoCSer.Deploy.DeployState> result = TcpClient.TcpInternalClient.start(identity, startTime);
                    if (result.Type == AutoCSer.Net.TcpServer.ReturnType.Success)
                    {
                        isClear = checkIsClear(result.Value);
                        return(new DeployResult {
                            Index = identity.Index, State = result.Value
                        });
                    }
                    return(new DeployResult {
                        Index = -1, State = DeployState.StartError
                    });
                }
                finally
                {
                    if (isClear)
                    {
                        TcpClient.TcpInternalClient.clear(identity);         // && TcpClient.TcpInternalClient.clear(identity).Type != AutoCSer.Net.TcpServer.ReturnType.Success
                    }
                }
            }
#endif
            return(new DeployResult {
                Index = -1, State = DeployState.NoClient
            });
        }
Esempio n. 4
0
        /// <summary>
        /// 启动部署
        /// </summary>
        /// <returns>部署结果</returns>
        internal DeployResult Deploy()
        {
#if NoAutoCSer
            throw new Exception();
#else
            if (TcpClient.IsClient)
            {
                AutoCSer.Net.IndexIdentity identity = TcpClient.TcpInternalClient.create(TcpClient.ClientId);
                byte isStart = 0;
                try
                {
                    Client client = TcpClient.Client;
                    Dictionary <HashString, FileSource> fileSources = DictionaryCreator.CreateHashString <FileSource>();
                    ClientTaskInfo[] tasks = new ClientTaskInfo[Tasks.Length];
                    for (int taskIndex = 0; taskIndex != Tasks.Length; ++taskIndex)
                    {
                        switch (Tasks[taskIndex].Type)
                        {
                        case TaskType.Run:
                        case TaskType.AssemblyFile: appendSource(fileSources, ref Tasks[taskIndex], ref tasks[taskIndex]); break;

                        case TaskType.File:
                            //appendFileSource(fileSources, ref Tasks[taskIndex], ref tasks[taskIndex]);
                            DirectoryInfo clientDirectory = new DirectoryInfo(Tasks[taskIndex].ClientPath);
                            Directory     directory       = Directory.Create(clientDirectory, client.Config.FileLastWriteTime, Tasks[taskIndex].FileSearchPatterns);
                            tasks[taskIndex].Directory = TcpClient.TcpInternalClient.getFileDifferent(directory, Tasks[taskIndex].ServerPath);
                            tasks[taskIndex].Directory.Load(clientDirectory);
                            break;

                        case TaskType.WebFile:
                            DirectoryInfo webClientDirectory = new DirectoryInfo(Tasks[taskIndex].ClientPath);
                            Directory     webDirectory       = Directory.CreateWeb(webClientDirectory, client.Config.FileLastWriteTime);
                            tasks[taskIndex].Directory = TcpClient.TcpInternalClient.getFileDifferent(webDirectory, Tasks[taskIndex].ServerPath);
                            tasks[taskIndex].Directory.Load(webClientDirectory);
                            break;
                        }
                    }

                    if (fileSources.Count != 0 && !TcpClient.TcpInternalClient.setFileSource(identity, fileSources.getArray(value => value.Value.Data)))
                    {
                        return(new DeployResult {
                            Index = -1, State = DeployState.SetFileSourceError
                        });
                    }
                    for (int taskIndex = 0; taskIndex != Tasks.Length; ++taskIndex)
                    {
                        switch (Tasks[taskIndex].Type)
                        {
                        case TaskType.Run:
                            if ((tasks[taskIndex].TaskIndex = TcpClient.TcpInternalClient.addRun(identity, tasks[taskIndex].FileIndexs.ToArray(), Tasks[taskIndex].ServerPath, Tasks[taskIndex].RunSleep)) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddRunError
                                });
                            }
                            break;

                        case TaskType.WebFile:
                        case TaskType.File:
                            if (TcpClient.TcpInternalClient.addFiles(identity, tasks[taskIndex].Directory, Tasks[taskIndex].ServerPath, Tasks[taskIndex].Type) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddFileError
                                });
                            }
                            break;

                        case TaskType.AssemblyFile:
                            if (TcpClient.TcpInternalClient.addAssemblyFiles(identity, tasks[taskIndex].FileIndexs.ToArray(), Tasks[taskIndex].ServerPath) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddAssemblyFileError
                                });
                            }
                            break;

                        case TaskType.WaitRunSwitch:
                            if (TcpClient.TcpInternalClient.addWaitRunSwitch(identity, tasks[Tasks[taskIndex].TaskIndex].TaskIndex) == -1)
                            {
                                return(new DeployResult {
                                    Index = -1, State = DeployState.AddWaitRunSwitchError
                                });
                            }
                            break;
                        }
                    }
                    if (TcpClient.TcpInternalClient.start(identity, DateTime.MinValue))
                    {
                        isStart = 1;
                        return(new DeployResult {
                            Index = identity.Index, State = DeployState.Success
                        });
                    }
                    return(new DeployResult {
                        Index = -1, State = DeployState.StartError
                    });
                }
                finally
                {
                    if (isStart == 0)
                    {
                        TcpClient.TcpInternalClient.clear(identity);              // && TcpClient.TcpInternalClient.clear(identity).Type != AutoCSer.Net.TcpServer.ReturnType.Success
                    }
                }
            }
#endif
            return(new DeployResult {
                Index = -1, State = DeployState.NoClient
            });
        }