blob: 52a31f2a178e4f07842e59fee6d8bb4cc6b4be86 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/*
* Copyright (c) 2010-2015, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.disco;
import com.isode.stroke.crypto.CryptoProvider;
import com.isode.stroke.elements.CapsInfo;
import com.isode.stroke.elements.DiscoInfo;
import com.isode.stroke.presence.PayloadAddingPresenceSender;
import com.isode.stroke.presence.PresenceSender;
import com.isode.stroke.queries.IQRouter;
public class ClientDiscoManager {
private PayloadAddingPresenceSender presenceSender;
private CryptoProvider crypto;
private DiscoInfoResponder discoInfoResponder;
private String capsNode = "";
private CapsInfo capsInfo;
/**
* Constructs the manager
*
* \param iqRouter the router on which requests will be answered \param
* presenceSender the presence sender to which all outgoing presence (with
* caps information) will be sent.
*/
public ClientDiscoManager(IQRouter iqRouter, PresenceSender presenceSender,
CryptoProvider crypto) {
this.crypto = crypto;
discoInfoResponder = new DiscoInfoResponder(iqRouter);
discoInfoResponder.start();
this.presenceSender = new PayloadAddingPresenceSender(presenceSender);
}
void delete() {
discoInfoResponder.stop();
}
/**
* Needs to be called before calling setDiscoInfo().
*/
public void setCapsNode(final String node) {
capsNode = node;
}
/**
* Sets the capabilities of the client.
*/
public void setDiscoInfo(final DiscoInfo discoInfo) {
capsInfo = new CapsInfoGenerator(capsNode, crypto).generateCapsInfo(discoInfo);
discoInfoResponder.clearDiscoInfo();
discoInfoResponder.setDiscoInfo(discoInfo);
discoInfoResponder.setDiscoInfo(
capsInfo.getNode() + "#" + capsInfo.getVersion(), discoInfo);
presenceSender.setPayload(capsInfo);
}
/**
* Returns the presence sender through which all outgoing presence should be
* sent. The manager will add the necessary caps information, and forward it
* to the presence sender passed at construction time.
*/
public PresenceSender getPresenceSender() {
return presenceSender;
}
/**
* Called when the client is connected. This resets the presence sender,
* such that it assumes initial presence hasn't been sent yet.
*/
public void handleConnected() {
presenceSender.reset();
}
}
|