> 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.sfbaseservice.md).

# Class sfBaseService

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

Base class for the Scene Fusion service from which authenticated and unauthenticated variants are derived. Provides methods for joining, leaving, starting, and stopping LAN sessions.

```csharp
public abstract class sfBaseService
```

#### Inheritance

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

#### Derived

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

## Fields

### m\_portQueue <a href="#ks_scenefusion_client_sfbaseservice_m_portqueue" id="ks_scenefusion_client_sfbaseservice_m_portqueue"></a>

```csharp
protected Queue<ushort> m_portQueue
```

#### Field Value

Queue\<ushort>

### m\_reactor <a href="#ks_scenefusion_client_sfbaseservice_m_reactor" id="ks_scenefusion_client_sfbaseservice_m_reactor"></a>

```csharp
protected ksService m_reactor
```

#### Field Value

ksService

### m\_room <a href="#ks_scenefusion_client_sfbaseservice_m_room" id="ks_scenefusion_client_sfbaseservice_m_room"></a>

```csharp
protected ksRoom m_room
```

#### Field Value

ksRoom

### m\_session <a href="#ks_scenefusion_client_sfbaseservice_m_session" id="ks_scenefusion_client_sfbaseservice_m_session"></a>

```csharp
protected sfSession m_session
```

#### Field Value

[sfSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfsession.md)

### m\_startingSession <a href="#ks_scenefusion_client_sfbaseservice_m_startingsession" id="ks_scenefusion_client_sfbaseservice_m_startingsession"></a>

```csharp
protected bool m_startingSession
```

#### Field Value

bool

### m\_username <a href="#ks_scenefusion_client_sfbaseservice_m_username" id="ks_scenefusion_client_sfbaseservice_m_username"></a>

```csharp
protected string m_username
```

#### Field Value

string

## Properties

### ConnectionError <a href="#ks_scenefusion_client_sfbaseservice_connectionerror" id="ks_scenefusion_client_sfbaseservice_connectionerror"></a>

Last failed connection message.

```csharp
public string ConnectionError { get; set; }
```

#### Property Value

string

### Coroutines <a href="#ks_scenefusion_client_sfbaseservice_coroutines" id="ks_scenefusion_client_sfbaseservice_coroutines"></a>

Coroutine manager

```csharp
public ksCoroutineManager Coroutines { get; }
```

#### Property Value

ksCoroutineManager

### IsConnected <a href="#ks_scenefusion_client_sfbaseservice_isconnected" id="ks_scenefusion_client_sfbaseservice_isconnected"></a>

Are we connected to a session?

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

#### Property Value

bool

### IsConnecting <a href="#ks_scenefusion_client_sfbaseservice_isconnecting" id="ks_scenefusion_client_sfbaseservice_isconnecting"></a>

Are we connecting to a session?

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

#### Property Value

bool

### IsJoiningSession <a href="#ks_scenefusion_client_sfbaseservice_isjoiningsession" id="ks_scenefusion_client_sfbaseservice_isjoiningsession"></a>

Are we joining an editing session?

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

#### Property Value

bool

### IsSessionCreator <a href="#ks_scenefusion_client_sfbaseservice_issessioncreator" id="ks_scenefusion_client_sfbaseservice_issessioncreator"></a>

Did the local user start the session?

```csharp
public bool IsSessionCreator { get; set; }
```

#### Property Value

bool

### IsStartingSession <a href="#ks_scenefusion_client_sfbaseservice_isstartingsession" id="ks_scenefusion_client_sfbaseservice_isstartingsession"></a>

Are we starting an editing session?

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

#### Property Value

bool

### LocalUsername <a href="#ks_scenefusion_client_sfbaseservice_localusername" id="ks_scenefusion_client_sfbaseservice_localusername"></a>

Name of logged in user.

```csharp
public string LocalUsername { get; }
```

#### Property Value

string

### ObjectCount <a href="#ks_scenefusion_client_sfbaseservice_objectcount" id="ks_scenefusion_client_sfbaseservice_objectcount"></a>

Synced object number.

```csharp
public int ObjectCount { get; }
```

#### Property Value

int

### Session <a href="#ks_scenefusion_client_sfbaseservice_session" id="ks_scenefusion_client_sfbaseservice_session"></a>

Editing session we are connected to. Null if not connected to a session.

```csharp
public sfSession Session { get; }
```

#### Property Value

[sfSession](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfsession.md)

### SessionInfo <a href="#ks_scenefusion_client_sfbaseservice_sessioninfo" id="ks_scenefusion_client_sfbaseservice_sessioninfo"></a>

Session info

```csharp
public sfSessionInfo SessionInfo { get; }
```

#### Property Value

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

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

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

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

#### Property Value

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

## Methods

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

Builds the queue of ports to try connecting on. Default implementation does nothing. An empty queue means use the port from the room info.

```csharp
protected virtual 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_sfbaseservice_canjoinsession" id="ks_scenefusion_client_sfbaseservice_canjoinsession"></a>

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

```csharp
protected virtual bool CanJoinSession()
```

#### Returns

bool

true if we can join a session.

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

Connects to the room. Derived classes must implement this.

```csharp
protected abstract void Connect()
```

### GetAllUserInfos() <a href="#ks_scenefusion_client_sfbaseservice_getalluserinfos" id="ks_scenefusion_client_sfbaseservice_getalluserinfos"></a>

```csharp
public List<sfUIUserInfo> GetAllUserInfos()
```

#### Returns

List<[sfUIUserInfo](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfuiuserinfo.md)>

infos of all users

### InvokeOnConnect() <a href="#ks_scenefusion_client_sfbaseservice_invokeonconnect" id="ks_scenefusion_client_sfbaseservice_invokeonconnect"></a>

Invokes the on connect event.

```csharp
protected void InvokeOnConnect()
```

### InvokeOnConnect(string) <a href="#ks_scenefusion_client_sfbaseservice_invokeonconnect_system_string" id="ks_scenefusion_client_sfbaseservice_invokeonconnect_system_string"></a>

Invokes the on connect event with an error message.

```csharp
protected void InvokeOnConnect(string error)
```

#### Parameters

`error` string

error message.

### InvokeUserInfoChangeCallback(sfUser, UserInfoChangeType) <a href="#ks_scenefusion_client_sfbaseservice_invokeuserinfochangecallback_ks_scenefusion_client_sfuser_ks_sce" id="ks_scenefusion_client_sfbaseservice_invokeuserinfochangecallback_ks_scenefusion_client_sfuser_ks_sce"></a>

Invokes the user info change call back with the given user.

```csharp
public void InvokeUserInfoChangeCallback(sfUser user, sfBaseService.UserInfoChangeType type)
```

#### Parameters

`user` [sfUser](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfuser.md)

user whose info changed

`type` [sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[UserInfoChangeType](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.userinfochangetype.md)

### JoinSession(sfSessionInfo) <a href="#ks_scenefusion_client_sfbaseservice_joinsession_ks_scenefusion_client_sfsessioninfo" id="ks_scenefusion_client_sfbaseservice_joinsession_ks_scenefusion_client_sfsessioninfo"></a>

Connects to an editing session.

```csharp
public void JoinSession(sfSessionInfo sessionInfo)
```

#### Parameters

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

### LeaveSession(bool) <a href="#ks_scenefusion_client_sfbaseservice_leavesession_system_boolean" id="ks_scenefusion_client_sfbaseservice_leavesession_system_boolean"></a>

Disconnects from the current editing session, or cancels a connection attempt. Does nothing if not connected or connecting to a session.

```csharp
public void LeaveSession(bool temporary = false)
```

#### Parameters

`temporary` bool

if true, tells the server we are intending to reconnect so it won't shutdown right away if there are not users.

### OnStartSession(sfProjectInfo, sfSessionInfo, string) <a href="#ks_scenefusion_client_sfbaseservice_onstartsession_ks_scenefusion_client_sfprojectinfo_ks_scenefusio" id="ks_scenefusion_client_sfbaseservice_onstartsession_ks_scenefusion_client_sfprojectinfo_ks_scenefusio"></a>

Called when a start session request completes.

```csharp
protected void OnStartSession(sfProjectInfo projectInfo, sfSessionInfo sessionInfo, string response)
```

#### Parameters

`projectInfo` [sfProjectInfo](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfprojectinfo.md)

Project info for the new session. Null if an error occurred or if the session is a LAN session. Unused.

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

Info for newly started session, or null if an error occurred.

`response` string

### RegisterUserInfoChangeCallback(UserInfoChangeCallback) <a href="#ks_scenefusion_client_sfbaseservice_registeruserinfochangecallback_ks_scenefusion_client_sfbaseservi" id="ks_scenefusion_client_sfbaseservice_registeruserinfochangecallback_ks_scenefusion_client_sfbaseservi"></a>

Registers the user info change call back, which will be called when a user's info changes.

```csharp
public void RegisterUserInfoChangeCallback(sfBaseService.UserInfoChangeCallback callback)
```

#### Parameters

`callback` [sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[UserInfoChangeCallback](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.userinfochangecallback.md)

### StartLocalSession(string, sfSessionInfo) <a href="#ks_scenefusion_client_sfbaseservice_startlocalsession_system_string_ks_scenefusion_client_sfsessioni" id="ks_scenefusion_client_sfbaseservice_startlocalsession_system_string_ks_scenefusion_client_sfsessioni"></a>

Launch a local server

```csharp
public void StartLocalSession(string sessionId, sfSessionInfo info)
```

#### Parameters

`sessionId` string

Session ID

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

Session information

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

Stops a session. Derived classes must implement this.

```csharp
public abstract void StopSession(sfSessionInfo session, sfWebServiceCallbacks.StopSession callback)
```

#### Parameters

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

`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.

### UnregisterUserInfoChangeCallback(UserInfoChangeCallback) <a href="#ks_scenefusion_client_sfbaseservice_unregisteruserinfochangecallback_ks_scenefusion_client_sfbaseser" id="ks_scenefusion_client_sfbaseservice_unregisteruserinfochangecallback_ks_scenefusion_client_sfbaseser"></a>

Unregisters the user info change call back.

```csharp
public void UnregisterUserInfoChangeCallback(sfBaseService.UserInfoChangeCallback callback)
```

#### Parameters

`callback` [sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[UserInfoChangeCallback](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.userinfochangecallback.md)

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

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

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

#### Parameters

`deltaTime` float

deltaTime since the last update in seconds.

### OnConnect <a href="#ks_scenefusion_client_sfbaseservice_onconnect" id="ks_scenefusion_client_sfbaseservice_onconnect"></a>

Invoked when the user connects to a session.

```csharp
public event sfBaseService.ConnectHandler OnConnect
```

#### Event Type

[sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[ConnectHandler](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.connecthandler.md)

### OnDisconnect <a href="#ks_scenefusion_client_sfbaseservice_ondisconnect" id="ks_scenefusion_client_sfbaseservice_ondisconnect"></a>

Invokes when the user disconnects from a session.

```csharp
public event sfBaseService.DisconnectHandler OnDisconnect
```

#### Event Type

[sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[DisconnectHandler](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.disconnecthandler.md)

### PreConnect <a href="#ks_scenefusion_client_sfbaseservice_preconnect" id="ks_scenefusion_client_sfbaseservice_preconnect"></a>

Invoked before connecting to a session.

```csharp
public event sfBaseService.PreConnectHandler PreConnect
```

#### Event Type

[sfBaseService](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice.md).[PreConnectHandler](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfbaseservice/ks.scenefusion.client.sfbaseservice.preconnecthandler.md)
