Eriksson Beam API
Search Results for

    Show / Hide Table of Contents

    Error Handling

    The Eriksson Beam API uses specific exception types to indicate different error conditions. This guide covers all exception types and recommended handling strategies.

    Exception Types

    ErikssonBeamNotRunningException

    When thrown: Eriksson Beam process is not running or not responding.

    Common causes:

    • Eriksson Beam hasn't been started
    • Process crashed or was closed
    • 10-minute idle timeout exceeded
    • Process ID doesn't match a running instance

    Example:

    try
    {
        var client = await ErikssonBeamFinder.GetFirstSupportedBeamClient(args);
    }
    catch (ErikssonBeamNotRunningException ex)
    {
        Console.WriteLine("Eriksson Beam is not running.");
        Console.WriteLine("Please start Eriksson Beam and try again within 10 minutes.");
    }
    

    ErikssonBeamConnectionException

    When thrown: Connection to Eriksson Beam failed.

    Common causes:

    • Named pipe not available
    • Connection refused
    • Network/IPC issues

    Example:

    try
    {
        var client = await ErikssonBeamClient.AttemptConnection(args);
    }
    catch (ErikssonBeamConnectionException ex)
    {
        Console.WriteLine($"Connection failed: {ex.Message}");
        Console.WriteLine("Try restarting Eriksson Beam.");
    }
    

    ServerErrorException

    When thrown: Server processed the request but returned an error.

    Access error details:

    catch (ServerErrorException ex)
    {
        ResponseCode code = ex.Response.ResponseCode;
        string message = ex.Response.ErrorMessage;
    }
    

    Response codes:

    Code Meaning
    Success Operation succeeded (not thrown)
    InternalServerError Unexpected server error
    LicenseError Invalid or expired license key
    VersionError API version mismatch
    Unauthorized Not authorized for this operation
    InvalidRequest Malformed or invalid request
    Timeout Server-side timeout
    ServerBusy Server is processing another request
    Uninitialized Server not ready

    Example:

    try
    {
        await client.PushBeamDesignerAsync("project", design);
    }
    catch (ServerErrorException ex)
    {
        switch (ex.Response.ResponseCode)
        {
            case ResponseCode.LicenseError:
                Console.WriteLine("License validation failed.");
                Console.WriteLine("Please check your license key.");
                break;
    
            case ResponseCode.InvalidRequest:
                Console.WriteLine($"Invalid data: {ex.Response.ErrorMessage}");
                break;
    
            case ResponseCode.InternalServerError:
                Console.WriteLine($"Server error: {ex.Response.ErrorMessage}");
                break;
    
            default:
                Console.WriteLine($"Error ({ex.Response.ResponseCode}): {ex.Response.ErrorMessage}");
                break;
        }
    }
    

    UnexpectedMessageException

    When thrown: Server sent an unexpected response type.

    Common causes:

    • Protocol mismatch
    • API version incompatibility
    • Internal communication error

    Resolution: This usually indicates a bug. Contact support with details.

    catch (UnexpectedMessageException ex)
    {
        Console.WriteLine($"Unexpected response: {ex.Message}");
        Console.WriteLine("This may indicate a version mismatch.");
    }
    

    MessageReadException

    When thrown: Failed to parse server response.

    Common causes:

    • Corrupted response
    • Serialization error
    • Connection interrupted during transfer

    Resolution: Retry the operation. If persistent, restart Eriksson Beam.

    catch (MessageReadException ex)
    {
        Console.WriteLine($"Failed to read response: {ex.Message}");
        Console.WriteLine("Retrying...");
        // Implement retry logic
    }
    

    InvalidRequestException

    When thrown: Client sent an invalid request.

    Common causes:

    • Internal validation failure
    • Malformed request construction

    Resolution: Usually indicates a bug in the API usage. Check parameters.

    Standard .NET Exceptions

    Exception When Thrown
    ArgumentNullException Null parameter passed to method
    ArgumentException Invalid parameter value (e.g., ProcessID <= 0)
    ObjectDisposedException Using disposed client/launcher
    OperationCanceledException Timeout exceeded
    TimeoutException Connection attempts exhausted

    Recommended Error Handling Pattern

    public async Task<bool> SafeUpdateDesign(
        ErikssonBeamClient client,
        string project,
        Action<BeamDesign> modifier)
    {
        try
        {
            // Pull current design
            var design = await client.PullBeamDesignerAsync(project);
    
            // Apply modifications
            modifier(design);
    
            // Push changes
            await client.PushBeamDesignerAsync(project, design);
    
            return true;
        }
        catch (ErikssonBeamNotRunningException)
        {
            Console.WriteLine("Error: Eriksson Beam is not running.");
            Console.WriteLine("Start Eriksson Beam and try again.");
            return false;
        }
        catch (ServerErrorException ex) when (ex.Response.ResponseCode == ResponseCode.LicenseError)
        {
            Console.WriteLine("Error: License validation failed.");
            return false;
        }
        catch (ServerErrorException ex)
        {
            Console.WriteLine($"Server error: {ex.Response.ErrorMessage}");
            return false;
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Error: Operation timed out.");
            Console.WriteLine("Increase IdleTimeoutMs or check connection.");
            return false;
        }
        catch (ObjectDisposedException)
        {
            Console.WriteLine("Error: Client has been disposed.");
            return false;
        }
    }
    

    Retry Strategy

    For transient errors, implement retry with exponential backoff:

    public async Task<T> WithRetry<T>(
        Func<Task<T>> operation,
        int maxRetries = 3,
        int initialDelayMs = 1000)
    {
        int delay = initialDelayMs;
    
        for (int attempt = 1; attempt <= maxRetries; attempt++)
        {
            try
            {
                return await operation();
            }
            catch (ErikssonBeamConnectionException) when (attempt < maxRetries)
            {
                Console.WriteLine($"Attempt {attempt} failed. Retrying in {delay}ms...");
                await Task.Delay(delay);
                delay *= 2;  // Exponential backoff
            }
            catch (MessageReadException) when (attempt < maxRetries)
            {
                Console.WriteLine($"Read error. Retrying in {delay}ms...");
                await Task.Delay(delay);
                delay *= 2;
            }
        }
    
        throw new Exception("Max retries exceeded");
    }
    
    // Usage
    var design = await WithRetry(() => client.PullBeamDesignerAsync("project"));
    

    Logging Errors

    Use the optional ILogger parameter for diagnostic logging:

    using Microsoft.Extensions.Logging;
    
    var loggerFactory = LoggerFactory.Create(builder =>
    {
        builder
            .AddConsole()
            .SetMinimumLevel(LogLevel.Debug);
    });
    
    var logger = loggerFactory.CreateLogger<Program>();
    var client = await ErikssonBeamClient.AttemptConnection(args, logger);
    

    See Also

    • Connection Methods - Connection options
    • Best Practices - Recommended patterns
    • Troubleshooting - Problem resolution
    • Edit this page
    In this article
    Back to top Generated by DocFX