Skip to content

Latest commit

 

History

History
84 lines (56 loc) · 2.88 KB

README.md

File metadata and controls

84 lines (56 loc) · 2.88 KB

#iRacingSDK.Net - Alternative

[Build status

This dot.net library allows access to the raw data stream from the iRacing Motorsport Racing simulation (www.iracing.com). It also provides an interface to control certain aspects of the game. It is based on the official C++ SDK.

It provides access to the game's data interface using conventional dot.net paradigms.

At this point in time, it is heavily focused on supporting the data stream provided by the game during a replay session. But it should also be useful for live non-replay mode.

There are other dot.net implementations of the iRacing SDK library - see the iRacing Developer's forum for references and downloads for those.

##Accessing game data

You can use the enumeration access of the iRacing class to access a stream of data samples, generated by the game. For example, to get a single sample you can use the following:

var iracing = new iRacingConnection();
var data = iracing.GetDataFeed().First();

This will return a single DataSample value.

Alternatively you can get a infinite sample set, or a set of samples until some condition is met.

foreach( var data in iracing
             .GetDataFeed()
             .TakeWhile( d => d.Telemetry.SessionState != SessionState.CoolDown ))
{
    Console.WriteLine(data.Telemetry.RaceLaps);

    Thread.Sleep(1000);
}

Console.WriteLine("Finished.");

For more examples of accessing this data - checkout the Sample project within this repo.

##Access game data via Events

You can access the DataSample in an event handler. Add your event handler to the NewData event of the iRacing type.

public void Setup()
{
    ...
    iracing.NewData += iRacing_NewData;
    iracing.StartListening();
}

void iRacing_NewData(DataSample data)
{
    var tractionControl = data.Telemetry.dcTractionControl;

    ...
}

NB: You can not access the GetDataFeed() enumerator inside an Event Handler - You can not use the two types of accessors to DataSamples - events or enumerators - but not both.

##Sending Messages to the game

You can use the Replay object to control various aspects of the game. For example, to change the camera to a specific car:

var data = iracing.GetDataFeed().First();
var camera = data.SessionData.CameraInfo.Groups.First(g => g.GroupName == "TV3");

var carIdx = 3;
var number = data.SessionData.DriverInfo.Drivers[carIdx].CarNumberRaw;
iRacing.Replay.CameraOnDriver((short)number, (short)camera.GroupNum, 0);

##DataSample

This type is the container for all data retrieved from iRacing. More details here

##Data Feed Filters

There are a set of extension methods to the IEnumerable<DataSample> set to enhance and refine some of the game's data stream. More details here