Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 61 additions & 19 deletions src/pages/docs/storage-history/history.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,12 @@ Use the `untilAttach` option when making history requests on attached channels.
const realtime = new Ably.Realtime('{{API_KEY}}');
const channel = realtime.channels.get('{{RANDOM_CHANNEL_NAME}}');
await channel.publish('example', 'message data');
await channel.attach();

channel.subscribe((message) => {
console.log('Received message: ' + message.data);
});

await channel.whenState('attached');

const history = await channel.history({untilAttach: true});
const lastMessage = history.items[0];
Expand All @@ -455,7 +460,12 @@ console.log('Last message before attach: ' + lastMessage.data);
const realtime = new Ably.Realtime('{{API_KEY}}');
const channel = realtime.channels.get('{{RANDOM_CHANNEL_NAME}}');
await channel.publish('example', 'message data');
await channel.attach();

channel.subscribe((message) => {
console.log('Received message: ' + message.data);
});

await channel.whenState('attached');

const history = await channel.history({untilAttach: true});
const lastMessage = history.items[0];
Expand All @@ -465,7 +475,12 @@ console.log('Last message before attach: ' + lastMessage.data);
```realtime_ruby
realtime = Ably::Realtime.new('{{API_KEY}}')
channel = realtime.channels.get('{{RANDOM_CHANNEL_NAME}}')
channel.attach do

channel.subscribe do |message|
puts "Received message: #{message.data}"
end

channel.on(:attached) do
channel.history(until_attach: true) do |result_page|
last_message = result_page.items.last
puts "Last message before attach: #{last_message.data}")
Expand All @@ -476,6 +491,14 @@ console.log('Last message before attach: ' + lastMessage.data);
```realtime_java
AblyRealtime realtime = new AblyRealtime("{{API_KEY}}");
Channel channel = realtime.channels.get("{{RANDOM_CHANNEL_NAME}}");

channel.subscribe(new MessageListener() {
@Override
public void onMessage(Message message) {
System.out.println("Received message: " + message.data);
}
});

channel.on(ChannelState.attached, new ChannelStateListener() {
@Override
public void onChannelStateChanged(ChannelStateChange stateChange) {
Expand All @@ -490,37 +513,49 @@ console.log('Last message before attach: ' + lastMessage.data);
}
}
});

channel.attach();
```

```realtime_csharp
AblyRealtime realtime = new AblyRealtime("{{API_KEY}}");
IRealtimeChannel channel = realtime.Channels.Get("{{RANDOM_CHANNEL_NAME}}");
await channel.AttachAsync();

channel.Subscribe(message => {
Console.WriteLine("Received message: " + message.Data);
});

await channel.WaitForAttachAsync();

PaginatedResult<Message> resultPage = await channel.HistoryAsync(untilAttach: true);
Message lastMessage = resultPage.Items[0];
Console.WriteLine("Last message before attach: " + lastMessage.data);
Console.WriteLine("Last message before attach: " + lastMessage.Data);
```

```realtime_objc
ARTRealtime *realtime = [[ARTRealtime alloc] initWithKey:@"{{API_KEY}}"];
ARTRealtimeChannel *channel = [realtime.channels get:@"RANDOM_CHANNEL_NAME"];
[channel attach];

[channel subscribe:^(ARTMessage *message) {
NSLog(@"Received message: %@", message.data);
}];

[channel on:ARTChannelEventAttached callback:^(ARTErrorInfo *error) {
ARTRealtimeHistoryQuery *query = [[ARTRealtimeHistoryQuery alloc] init];
query.untilAttach = YES;
[channel history:query callback:^(ARTPaginatedResult<ARTMessage *> *resultPage, ARTErrorInfo *error) {
ARTMessage *lastMessage = resultPage.items[0];
NSLog(@"Last message: %@ - %@", lastMessage.id,lastMessage.data);
NSLog(@"Last message before attach: %@ - %@", lastMessage.id, lastMessage.data);
} error:nil];
}];
```

```realtime_swift
let realtime = ARTRealtime(key: "{{API_KEY}}")
let channel = realtime.channels.get("{{RANDOM_CHANNEL_NAME}}")
channel.attach()

channel.subscribe { message in
print("Received message: \(message.data)")
}

channel.on(.attached) { error in
let query = ARTRealtimeHistoryQuery()
query.untilAttach = true
Expand All @@ -538,24 +573,26 @@ if err != nil {
log.Fatalf("Failed to create Ably Realtime client: %v", err)
}

// Get the channel
channel := client.Channels.Get("{{RANDOM_CHANNEL_NAME}}")

// Publish a message
err = channel.Publish(context.Background(), "example", "message data")
unsubscribe, err := channel.Subscribe(context.Background(), func(msg *ably.Message) {
fmt.Printf("Received message: %v\n", msg.Data)
})
if err != nil {
log.Fatalf("Failed to publish message: %v", err)
log.Fatalf("Failed to subscribe: %v", err)
}
defer unsubscribe()

// Attach the channel
_ = channel.Attach(context.Background())
err = channel.Attach(context.Background())
if err != nil {
log.Fatalf("Failed to attach: %v", err)
}

// Get channel history until attach
history, _ := channel.HistoryUntilAttach()
pages, _ := history.Pages(context.Background())
for pages.Next(context.Background()) {
for _, message := range pages.Items() {
fmt.Println(message)
fmt.Printf("Last message before attach: %v\n", message.Data)
}
}
```
Expand All @@ -568,7 +605,12 @@ final realtime = ably.Realtime(options: clientOptions);
final channel = realtime.channels.get(
'{{RANDOM_CHANNEL_NAME}}'
);
await channel.publish(name: 'example', data: 'message data');

final channelMessageSubscription = channel.subscribe()
.listen((message) {
print('Received message: ${message.data}');
});

await channel.attach();

final historyParams = ably.RealtimeHistoryParams(untilAttach: true);
Expand Down