```javascript
const connectionStatus = chatClient.connection.status;
// The error related to the current status
const error = chatClient.connection.error;
```
```react
import { useChatConnection } from '@ably/chat/react';
const MyComponent = () => {
const { currentStatus } = useChatConnection({
onStatusChange: (statusChange) => {
console.log('Connection status changed to: ', statusChange.current);
},
});
return Connection status is: {currentStatus};
};
```
```swift
let status = chatClient.connection.status
```
```kotlin
val connectionStatus = chatClient.connection.status
```
```jetpack
val connectionStatus = chatClient.connection.status
```
```react
import { useMessages } from '@ably/chat/react';
const MyComponent = () => {
const { connectionStatus } = useMessages({
listener: (message) => {
console.log('Received message: ', message);
},
});
return Current connection status is: {connectionStatus};
};
```
Listeners can also be registered to monitor the changes in connection status. Any hooks that take an optional listener to monitor their events, such as typing indicator events in the `useTyping` hook, can also register a status change listener. Changing the value provided for a listener will cause the previously registered listener instance to stop receiving events. All messages will be received by exactly one listener.
```javascript
const { off } = chatClient.connection.onStatusChange((change) => console.log(change));
```
```react
import { useOccupancy } from '@ably/chat/react';
const MyComponent = () => {
useOccupancy({
onConnectionStatusChange: (connectionStatusChange) => {
console.log('Connection status change:', connectionStatusChange);
},
});
return Occupancy Component;
};
```
```swift
let subscription = chatClient.connection.onStatusChange()
for await statusChange in subscription {
print("Connection status changed to: \(statusChange.current)")
}
```
```kotlin
val (off) = chatClient.connection.onStatusChange { statusChange: ConnectionStatusChange ->
println(statusChange.toString())
}
```
```jetpack
import androidx.compose.material.*
import androidx.compose.runtime.*
import com.ably.chat.ChatClient
import com.ably.chat.extensions.compose.collectAsStatus
@Composable
fun MyComponent(chatClient: ChatClient) {
val connectionStatus by chatClient.connection.collectAsStatus()
LaunchedEffect(connectionStatus) {
println("Connection status changed to: $connectionStatus")
}
Text("Connection status: $connectionStatus")
}
```
```javascript
off();
```
```kotlin
off()
```
```javascript
const { off } = room.onDiscontinuity((reason: ErrorInfo) => {
// Recover from the discontinuity
});
```
```react
import { useState } from 'react';
import { useMessages } from '@ably/chat/react';
const MyComponent = () => {
useMessages({
onDiscontinuity: (error) => {
console.log('Discontinuity detected:', error);
},
});
return ...;
};
```
```swift
let subscription = room.onDiscontinuity()
for await error in subscription {
print("Recovering from the error: \(error)")
}
```
```kotlin
val (off) = room.onDiscontinuity { reason: ErrorInfo ->
// Recover from the discontinuity
}
```
```jetpack
import androidx.compose.runtime.*
import com.ably.chat.Room
import com.ably.chat.discontinuityAsFlow
@Composable
fun MyComponent(room: Room) {
LaunchedEffect(room) {
room.discontinuityAsFlow().collect { error ->
// Recover from the discontinuity
println("Discontinuity detected: $error")
}
}
}
```
```javascript
off();
```
```kotlin
off()
```