> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/reactor/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/reactor/api-reference/ks.reactor/ks.reactor.ksrpcmanager-1.md).

# Class ksRPCManager\<Attribute>

Namespace: [KS.Reactor](/reactor/api-reference/ks.reactor.md)\
Assembly: KSCommon.dll

Manages the registration, storing and invocation of methods tagged with ksRPCAttributes.

```csharp
public class ksRPCManager<Attribute> where Attribute : ksRPCAttribute
```

#### Type Parameters

`Attribute`

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) ← [ksRPCManager\<Attribute>](/reactor/api-reference/ks.reactor/ks.reactor.ksrpcmanager-1.md)

#### Inherited Members

[object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object\)), [object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object-system-object\)), [object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone), [object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)

## Properties

### Instance <a href="#ks_reactor_ksrpcmanager_1_instance" id="ks_reactor_ksrpcmanager_1_instance"></a>

Singleton instance

```csharp
public static ksRPCManager<Attribute> Instance { get; }
```

#### Property Value

[ksRPCManager](/reactor/api-reference/ks.reactor/ks.reactor.ksrpcmanager-1.md)\<Attribute>

## Methods

### HasRegisteredRPC(uint) <a href="#ks_reactor_ksrpcmanager_1_hasregisteredrpc_system_uint32" id="ks_reactor_ksrpcmanager_1_hasregisteredrpc_system_uint32"></a>

Checks if at least one RPC handler has been registered for a specific RPC ID.

```csharp
public bool HasRegisteredRPC(uint id)
```

#### Parameters

`id` [uint](https://learn.microsoft.com/dotnet/api/system.uint32)

RPC ID.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### InvokeRPC\<T>(uint, object, Type, T, ksMultiType\[], bool) <a href="#ks_reactor_ksrpcmanager_1_invokerpc__1_system_uint32_system_object_system_type___0_ks_reactor_ksmult" id="ks_reactor_ksrpcmanager_1_invokerpc__1_system_uint32_system_object_system_type___0_ks_reactor_ksmult"></a>

Invoke an RPC on a target object from source T.

```csharp
public bool InvokeRPC<T>(uint id, object target, Type targetType, T source, ksMultiType[] args, bool executeOnMainThread = true)
```

#### Parameters

`id` [uint](https://learn.microsoft.com/dotnet/api/system.uint32)

RPC ID.

`target` [object](https://learn.microsoft.com/dotnet/api/system.object)

Target type

`targetType` [Type](https://learn.microsoft.com/dotnet/api/system.type)

Target to invoke on.

`source` T

Source of the rpc (player, server, etc).

`args` [ksMultiType](/reactor/api-reference/ks.reactor/ks.reactor.ksmultitype.md)\[]

RPC arguments.

`executeOnMainThread` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

RPC should be executed on the main thread.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if registered RPCs were found and invoked.

#### Type Parameters

`T`

### RegisterAssemblyRPCs(Assembly) <a href="#ks_reactor_ksrpcmanager_1_registerassemblyrpcs_system_reflection_assembly" id="ks_reactor_ksrpcmanager_1_registerassemblyrpcs_system_reflection_assembly"></a>

Search an assembly and register all instance methods tagged with a ksRPCAttribute.

```csharp
public void RegisterAssemblyRPCs(Assembly assembly)
```

#### Parameters

`assembly` [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly)

Assembly to search.

### RegisterRPC(uint, bool, MethodInfo) <a href="#ks_reactor_ksrpcmanager_1_registerrpc_system_uint32_system_boolean_system_reflection_methodinfo" id="ks_reactor_ksrpcmanager_1_registerrpc_system_uint32_system_boolean_system_reflection_methodinfo"></a>

Registers an RPC method.

```csharp
public void RegisterRPC(uint id, bool executeOnMainThread, MethodInfo method)
```

#### Parameters

`id` [uint](https://learn.microsoft.com/dotnet/api/system.uint32)

RPC ID

`executeOnMainThread` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

RPC should be executed on the main thread.

`method` [MethodInfo](https://learn.microsoft.com/dotnet/api/system.reflection.methodinfo)

RPC method.

### RegisterTypeRPCs(Type) <a href="#ks_reactor_ksrpcmanager_1_registertyperpcs_system_type" id="ks_reactor_ksrpcmanager_1_registertyperpcs_system_type"></a>

Searches a type and register all instance methods tagged with a ksRPCAttribute

```csharp
public void RegisterTypeRPCs(Type type)
```

#### Parameters

`type` [Type](https://learn.microsoft.com/dotnet/api/system.type)

Type to search

### SetValidSubclasses(params Type\[]) <a href="#ks_reactor_ksrpcmanager_1_setvalidsubclasses_system_type" id="ks_reactor_ksrpcmanager_1_setvalidsubclasses_system_type"></a>

Set the valid types all RPC methods owner must be a subclass of. If no subclass types are set, then all types are allowed.

```csharp
public void SetValidSubclasses(params Type[] types)
```

#### Parameters

`types` [Type](https://learn.microsoft.com/dotnet/api/system.type)\[]

Valid subclass types.
