> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/scene-fusion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kinematicsoup.gitbook.io/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfservice.md).

# Class sfService

Namespace: [KS.SceneFusion.Client](/scene-fusion/api-reference/ks.scenefusion.client.md)\
Assembly: KSUnity-Editor.dll

Scene Fusion service. Provides methods for authenticating, retrieving, joining, leaving, starting, and stopping sessions.

```csharp
public class sfService : sfBaseService
```

#### Inheritance

object ← [sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md) ← [sfService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfservice.md)

#### Inherited Members

[sfBaseService.PreConnect](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_preconnect), [sfBaseService.OnConnect](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_onconnect), [sfBaseService.OnDisconnect](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_ondisconnect), [sfBaseService.IsConnected](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_isconnected), [sfBaseService.IsConnecting](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_isconnecting), [sfBaseService.IsStartingSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_isstartingsession), [sfBaseService.m\_startingSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_startingsession), [sfBaseService.IsJoiningSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_isjoiningsession), [sfBaseService.ConnectionError](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_connectionerror), [sfBaseService.IsSessionCreator](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_issessioncreator), [sfBaseService.SessionInfo](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_sessioninfo), [sfBaseService.LocalUsername](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_localusername), [sfBaseService.m\_username](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_username), [sfBaseService.ObjectCount](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_objectcount), [sfBaseService.Session](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_session), [sfBaseService.m\_session](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_session), [sfBaseService.WebService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_webservice), [sfBaseService.Coroutines](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_coroutines), [sfBaseService.m\_reactor](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_reactor), [sfBaseService.m\_room](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_room), [sfBaseService.m\_portQueue](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_m_portqueue), [sfBaseService.Update(float)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_update_system_single), [sfBaseService.JoinSession(sfSessionInfo)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_joinsession_ks_scenefusion_client_sfsessioninfo), [sfBaseService.BuildPortQueue(sfSessionInfo)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_buildportqueue_ks_scenefusion_client_sfsessioninfo), [sfBaseService.Connect()](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_connect), [sfBaseService.StartLocalSession(string, sfSessionInfo)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_startlocalsession_system_string_ks_scenefusion_client_sfsessioni), [sfBaseService.LeaveSession(bool)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_leavesession_system_boolean), [sfBaseService.StopSession(sfSessionInfo, sfWebServiceCallbacks.StopSession)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_stopsession_ks_scenefusion_client_sfsessioninfo_ks_scenefusion_c), [sfBaseService.OnStartSession(sfProjectInfo, sfSessionInfo, string)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_onstartsession_ks_scenefusion_client_sfprojectinfo_ks_scenefusio), [sfBaseService.InvokeOnConnect()](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_invokeonconnect), [sfBaseService.InvokeOnConnect(string)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_invokeonconnect_system_string), [sfBaseService.CanJoinSession()](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_canjoinsession), [sfBaseService.GetAllUserInfos()](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_getalluserinfos), [sfBaseService.RegisterUserInfoChangeCallback(sfBaseService.UserInfoChangeCallback)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_registeruserinfochangecallback_ks_scenefusion_client_sfbaseservi), [sfBaseService.UnregisterUserInfoChangeCallback(sfBaseService.UserInfoChangeCallback)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_unregisteruserinfochangecallback_ks_scenefusion_client_sfbaseser), [sfBaseService.InvokeUserInfoChangeCallback(sfUser, sfBaseService.UserInfoChangeType)](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md#ks_scenefusion_client_sfbaseservice_invokeuserinfochangecallback_ks_scenefusion_client_sfuser_ks_sce)

## Constructors

### sfService(string, ksVersion, ksVersion) <a href="#ks_scenefusion_client_sfservice__ctor_system_string_ks_reactor_client_ksversion_ks_reactor_client_ks" id="ks_scenefusion_client_sfservice__ctor_system_string_ks_reactor_client_ksversion_ks_reactor_client_ks"></a>

Constructor

```csharp
public sfService(string url, ksVersion version, ksVersion serverVersion)
```

#### Parameters

`url` string

Web API Url

`version` ksVersion

Scene Fusion application version

`serverVersion` ksVersion

Scene Fusion server version.

## Properties

### IsLoggedIn <a href="#ks_scenefusion_client_sfservice_isloggedin" id="ks_scenefusion_client_sfservice_isloggedin"></a>

Are we logged into Scene Fusion?

```csharp
public bool IsLoggedIn { get; }
```

#### Property Value

bool

### OverrideServerPort <a href="#ks_scenefusion_client_sfservice_overrideserverport" id="ks_scenefusion_client_sfservice_overrideserverport"></a>

If non-zero, will first attempt to connect on this port, before attempting other ports.

```csharp
public ushort OverrideServerPort { get; set; }
```

#### Property Value

ushort

### WebService <a href="#ks_scenefusion_client_sfservice_webservice" id="ks_scenefusion_client_sfservice_webservice"></a>

Web service. Set this to change the web service implementation.

```csharp
public override sfIWebService WebService { get; }
```

#### Property Value

[sfIWebService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfiwebservice.md)

## Methods

### Authenticate(string, string, Login) <a href="#ks_scenefusion_client_sfservice_authenticate_system_string_system_string_ks_scenefusion_client_sfweb" id="ks_scenefusion_client_sfservice_authenticate_system_string_system_string_ks_scenefusion_client_sfweb"></a>

Sends a web request to login to Scene Fusion using an email and token. If you saved sfService.AuthenticationToken, you can reuse it for authentication with this function when you restart the application.

```csharp
public void Authenticate(string email, string token, sfWebServiceCallbacks.Login callback)
```

#### Parameters

`email` string

`token` string

`callback` [sfWebServiceCallbacks](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks.md).[Login](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks/ks.scenefusion.client.sfwebservicecallbacks.login.md)

callback to call when the request completes.

### BuildPortQueue(sfSessionInfo) <a href="#ks_scenefusion_client_sfservice_buildportqueue_ks_scenefusion_client_sfsessioninfo" id="ks_scenefusion_client_sfservice_buildportqueue_ks_scenefusion_client_sfsessioninfo"></a>

Builds the queue of ports to try connecting on.

```csharp
protected override void BuildPortQueue(sfSessionInfo sessionInfo)
```

#### Parameters

`sessionInfo` [sfSessionInfo](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfsessioninfo.md)

### CanJoinSession() <a href="#ks_scenefusion_client_sfservice_canjoinsession" id="ks_scenefusion_client_sfservice_canjoinsession"></a>

Checks if we can join a session. Invokes on connect with an error message if we cannot.

```csharp
protected override bool CanJoinSession()
```

#### Returns

bool

true if we can join a session.

### Connect() <a href="#ks_scenefusion_client_sfservice_connect" id="ks_scenefusion_client_sfservice_connect"></a>

Connects to the room.

```csharp
protected override void Connect()
```

### GetSessions(string, GetSessions) <a href="#ks_scenefusion_client_sfservice_getsessions_system_string_ks_scenefusion_client_sfwebservicecallback" id="ks_scenefusion_client_sfservice_getsessions_system_string_ks_scenefusion_client_sfwebservicecallback"></a>

Sends a web request to get lists of running sessions of a given version for all projects the authenticated user belongs to.

```csharp
public void GetSessions(string application, sfWebServiceCallbacks.GetSessions callback)
```

#### Parameters

`application` string

application name and version.

`callback` [sfWebServiceCallbacks](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks.md).[GetSessions](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks/ks.scenefusion.client.sfwebservicecallbacks.getsessions.md)

callback to call when the request completes.

### Login(string, string, Login) <a href="#ks_scenefusion_client_sfservice_login_system_string_system_string_ks_scenefusion_client_sfwebservice" id="ks_scenefusion_client_sfservice_login_system_string_system_string_ks_scenefusion_client_sfwebservice"></a>

Sends a web request to login to Scene Fusion using an email and password.

```csharp
public void Login(string email, string password, sfWebServiceCallbacks.Login callback)
```

#### Parameters

`email` string

`password` string

`callback` [sfWebServiceCallbacks](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks.md).[Login](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks/ks.scenefusion.client.sfwebservicecallbacks.login.md)

callback to call when the request completes.

### Logout() <a href="#ks_scenefusion_client_sfservice_logout" id="ks_scenefusion_client_sfservice_logout"></a>

Sends a web request to logout. Invalidates the authentication token so it cannot be reused.

```csharp
public void Logout()
```

### SetUserColor(int, ksColor, SetUserColor) <a href="#ks_scenefusion_client_sfservice_setusercolor_system_int32_ks_reactor_kscolor_ks_scenefusion_client_s" id="ks_scenefusion_client_sfservice_setusercolor_system_int32_ks_reactor_kscolor_ks_scenefusion_client_s"></a>

Sends a web request to set the authenticated user's color within a project.

```csharp
public void SetUserColor(int projectId, ksColor color, sfWebServiceCallbacks.SetUserColor callback)
```

#### Parameters

`projectId` int

`color` ksColor

`callback` [sfWebServiceCallbacks](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks.md).[SetUserColor](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks/ks.scenefusion.client.sfwebservicecallbacks.setusercolor.md)

callback to call when the request completes.

### StartSession(int, string, string) <a href="#ks_scenefusion_client_sfservice_startsession_system_int32_system_string_system_string" id="ks_scenefusion_client_sfservice_startsession_system_int32_system_string_system_string"></a>

Starts a new session and connects to it.

```csharp
public void StartSession(int projectId, string application, string sceneName)
```

#### Parameters

`projectId` int

`application` string

application name and version.

`sceneName` string

### StopSession(sfSessionInfo, StopSession) <a href="#ks_scenefusion_client_sfservice_stopsession_ks_scenefusion_client_sfsessioninfo_ks_scenefusion_clien" id="ks_scenefusion_client_sfservice_stopsession_ks_scenefusion_client_sfsessioninfo_ks_scenefusion_clien"></a>

Sends a web request to stop a session.

```csharp
public override void StopSession(sfSessionInfo sessionInfo, sfWebServiceCallbacks.StopSession callback)
```

#### Parameters

`sessionInfo` [sfSessionInfo](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfsessioninfo.md)

sessionInfo for session to stop.

`callback` [sfWebServiceCallbacks](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks.md).[StopSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfwebservicecallbacks/ks.scenefusion.client.sfwebservicecallbacks.stopsession.md)

callback to call when the request completes.

### Update(float) <a href="#ks_scenefusion_client_sfservice_update_system_single" id="ks_scenefusion_client_sfservice_update_system_single"></a>

Updates the service and all asyncronous network requests. You must call this every frame.

```csharp
public override void Update(float deltaTime)
```

#### Parameters

`deltaTime` float

deltaTime since the last update in seconds.

### OnLogout <a href="#ks_scenefusion_client_sfservice_onlogout" id="ks_scenefusion_client_sfservice_onlogout"></a>

Invoked when the user becomes logged out.

```csharp
public event sfService.LogoutHandler OnLogout
```

#### Event Type

[sfService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfservice.md).[LogoutHandler](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfservice/ks.scenefusion.client.sfservice.logouthandler.md)
