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
77
78
79
80
81
82
83
84
85
86
|
/*
* Copyright (c) 2012, Isode Limited, London, England.
* All rights reserved.
*/
/*
* Copyright (c) 2010, Remko Tronçon.
* All rights reserved.
*/
package com.isode.stroke.client;
import com.isode.stroke.jid.JID;
import com.isode.stroke.muc.MUCManager;
import com.isode.stroke.muc.MUCRegistry;
import com.isode.stroke.network.NetworkFactories;
import com.isode.stroke.presence.DirectedPresenceSender;
import com.isode.stroke.presence.StanzaChannelPresenceSender;
import com.isode.stroke.queries.responders.SoftwareVersionResponder;
/**
* Provides the core functionality for writing XMPP client software.
*
* Besides connecting to an XMPP server, this class also provides interfaces for
* performing most tasks on the XMPP network.
*/
public class Client extends CoreClient {
private MUCManager mucManager;
private MUCRegistry mucRegistry;
private DirectedPresenceSender directedPresenceSender;
private StanzaChannelPresenceSender stanzaChannelPresenceSender;
private SoftwareVersionResponder softwareVersionResponder;
/**
* Constructor.
*
* @param eventLoop Event loop used by the class, must not be null. The
* Client creates threads to do certain tasks. However, it
* posts events that it expects to be done in the application's
* main thread to this eventLoop. The application should
* use an appropriate EventLoop implementation for the application type. This
* EventLoop is just a way for the Client to pass these
* events back to the main thread, and should not be used by the
* application for its own purposes.
* @param jid User JID used to connect to the server, must not be null
* @param password User password to use, must not be null
* @param networkFactories An implementation of network interaction, must
* not be null.
*/
public Client(JID jid, String password, NetworkFactories networkFactories) {
super(jid, password, networkFactories);
stanzaChannelPresenceSender = new StanzaChannelPresenceSender(getStanzaChannel());
directedPresenceSender = new DirectedPresenceSender(stanzaChannelPresenceSender);
mucRegistry = new MUCRegistry();
mucManager = new MUCManager(getStanzaChannel(), getIQRouter(), directedPresenceSender, mucRegistry);
softwareVersionResponder = new SoftwareVersionResponder(getIQRouter());
softwareVersionResponder.start();
}
/**
* Get the manager for multi user chat rooms
* @return MUC manager, not null
*/
public MUCManager getMUCManager() {
return mucManager;
}
/**
* Get the registry for multi user chat rooms
* @return MUC registry, not null
*/
public MUCRegistry getMUCRegistry() {
return mucRegistry;
}
/**
* Sets the software version of the client.
*
* This will be used to respond to version queries from other entities.
*/
public void setSoftwareVersion(final String name, final String version, final String os) {
softwareVersionResponder.setVersion(name, version, os);
}
}
|