ErikssonBeamFinder

ErikssonBeamFinder

Discover and connect to running Eriksson Beam instances automatically.

When to Use

  • Eriksson Beam is already running
  • You don’t know the specific process ID
  • You want to find an instance with a specific file open
  • You want to discover all available instances

Basic Usage

Find Any Running Instance

var args = new ErikssonBeamConnectionAttemptArgs
{
    LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
    MaxAttempts = 10,
    WaitTimeBetweenAttemptsMs = 1000
};

var client = await ErikssonBeamFinder.GetFirstSupportedBeamClient(args);

try
{
    var design = await client.PullBeamDesignerAsync();
    // Work with design...
}
finally
{
    client.Dispose();
}

Find Instance with Specific File

// By file name
var client = await ErikssonBeamFinder.GetFirstClientWithFile("MyProject", args);

// By full path
var client = await ErikssonBeamFinder.GetFirstClientWithFile(@"C:\Projects\MyProject.ebf", args);

List All Available Instances

// Get process IDs of all supported Eriksson Beam instances
var processIds = await ErikssonBeamFinder.GetSupportedErikssonBeamInstances();

foreach (var pid in processIds)
{
    Console.WriteLine($"Found Eriksson Beam instance: PID {pid}");
}

Configuration Options

ErikssonBeamConnectionAttemptArgs

PropertyTypeDefaultDescription
LicenseKeystring""Required. API authorization key
ProcessIDint-1Ignored by Finder methods
IdleTimeoutMsint30000Client connection timeout (ms)
MaxAttemptsint10Connection retry attempts
WaitTimeBetweenAttemptsMsint1000Delay between retries (ms)

Version Compatibility

The Finder only returns instances with compatible API versions:

  • Connects to instances with matching major version
  • Automatically filters out older incompatible versions
  • No configuration needed - handled automatically

Important: 10-Minute Idle Timeout

Eriksson Beam only listens for API connections for 10 minutes after launch.

  • This timer starts when Eriksson Beam opens
  • Not reset by manual UI interactions
  • After timeout, API connections will fail

If connections fail:

  1. Close Eriksson Beam
  2. Reopen Eriksson Beam
  3. Retry connection within 10 minutes

Error Handling

try
{
    var client = await ErikssonBeamFinder.GetFirstSupportedBeamClient(args);
    // ...
}
catch (ErikssonBeamNotRunningException)
{
    Console.WriteLine("No running Eriksson Beam instances found.");
    Console.WriteLine("Please start Eriksson Beam and try again.");
}
catch (TimeoutException)
{
    Console.WriteLine("Connection timed out. Eriksson Beam may have exceeded its 10-minute idle limit.");
    Console.WriteLine("Restart Eriksson Beam and try again.");
}

Complete Example

using System;
using System.Threading.Tasks;
using ErikssonBeam.API.BeamClient;

class ConnectToRunning
{
    static async Task Main()
    {
        var args = new ErikssonBeamConnectionAttemptArgs
        {
            LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
            MaxAttempts = 5,
            WaitTimeBetweenAttemptsMs = 2000
        };

        Console.WriteLine("Searching for running Eriksson Beam instances...");

        try
        {
            // List all available instances
            var instances = await ErikssonBeamFinder.GetSupportedErikssonBeamInstances();
            Console.WriteLine($"Found {instances.Length} instance(s)");

            if (instances.Length == 0)
            {
                Console.WriteLine("Please start Eriksson Beam first.");
                return;
            }

            // Connect to first available
            var client = await ErikssonBeamFinder.GetFirstSupportedBeamClient(args);

            try
            {
                // Get list of open files
                var openFiles = await client.GetOpenBeamProjects();
                Console.WriteLine($"Open files: {string.Join(", ", openFiles)}");

                if (openFiles.Length > 0)
                {
                    var design = await client.PullBeamDesignerAsync(openFiles[0]);
                    Console.WriteLine($"Project: {design.DesignCriteria.ProjectInformation.ProjectName}");
                }
            }
            finally
            {
                client.Dispose();
            }
        }
        catch (ErikssonBeamNotRunningException)
        {
            Console.WriteLine("No compatible Eriksson Beam instances found.");
        }
    }
}

Methods Reference

GetFirstSupportedBeamClient

public static async Task<ErikssonBeamClient> GetFirstSupportedBeamClient(
    ErikssonBeamConnectionAttemptArgs args,
    ILogger logger = null)

Returns a connected client to the first compatible Eriksson Beam instance found.

Throws:

  • ErikssonBeamNotRunningException - No instances found
  • TimeoutException - Connection attempts exhausted

GetFirstClientWithFile

public static async Task<ErikssonBeamClient> GetFirstClientWithFile(
    string fileNameOrPath,
    ErikssonBeamConnectionAttemptArgs args,
    ILogger logger = null)

Returns a connected client to an instance that has the specified file open.

Parameters:

  • fileNameOrPath - File name (without extension) or full file path

Throws:

  • ErikssonBeamNotRunningException - No instances with that file found

GetSupportedErikssonBeamInstances

public static async Task<int[]> GetSupportedErikssonBeamInstances()

Returns process IDs of all running Eriksson Beam instances with compatible API versions.

IsRunning

public static bool IsRunning(int processId)

Checks if a specific process ID is a running Eriksson Beam instance.

See Also