/// <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); } }
/// <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); } }
/// <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 }); }
/// <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 }); }