/// <summary> /// </summary> private void CommandThreadEntry() { while (!CommandQueue.IsCompleted) { // Server name valid? if (Server == string.Empty) { Thread.Sleep(1 * 1000); continue; } // Connect to repro. if (Repository == null || !Repository.Connection.connectionEstablished()) { try { ServerInstance = new global::Perforce.P4.Server(new ServerAddress(Server)); Repository = new Repository(ServerInstance); Repository.Connection.UserName = Username; Options options = new Options(); options["Password"] = Password; Logger.Log(LogLevel.Info, LogCategory.Scm, "Connecting to perforce: {0}", Server); Repository.Connection.Connect(options); if (Repository.Connection.connectionEstablished()) { Logger.Log(LogLevel.Info, LogCategory.Scm, "Connected to perforce server."); UpdateClientName(); } } catch (P4Exception Ex) { Logger.Log(LogLevel.Error, LogCategory.Scm, "Failed to connect to perforce server with error: {0}", Ex.Message); Thread.Sleep(5 * 1000); continue; } } // Execute next command. PerforceCommandHandler Handler = CommandQueue.Take(); try { Handler(Repository); } catch (Exception Ex) { Logger.Log(LogLevel.Error, LogCategory.Scm, "Encountered exception while running perforce command: {0}", Ex.Message); } } }
/// <summary> /// </summary> /// <param name="Callback"></param> public void QueueAndAwaitCommand(PerforceCommandHandler Callback) { ManualResetEvent Event = new ManualResetEvent(false); QueueCommand( Repo => { try { Callback(Repo); } catch (Exception Ex) { Logger.Log(LogLevel.Error, LogCategory.Scm, "Encountered exception while running perforce command: {0}", Ex.Message); } finally { Event.Set(); } } ); Event.WaitOne(); }
/// <summary> /// </summary> /// <param name="Callback"></param> public void QueueCommand(PerforceCommandHandler Callback) { CommandQueue.Add(Callback); }