The XMPP Chat Client project aims to develop a client for instant messaging that supports the XMPP (eXtensible Messaging and Presence Protocol) protocol. This protocol is open-source and designed to enable communication across different instant messaging providers. The project involves implementing essential functionalities of an XMPP client to provide a seamless and decentralized messaging experience.
- Protocol Implementation: Develop a client that adheres to the XMPP protocol's standards.
- Understanding XMPP: Gain insight into the purpose and working of the XMPP protocol.
- Service Functionality: Understand the core functionalities offered by the XMPP protocol.
- Asynchronous Programming: Grasp the basics of asynchronous programming for network development.
The project entails creating an XMPP client that operates based on the XMPP protocol.
- Register a New Account: Allow users to register a new account on the server.
- Login: Enable users to log in to their accounts.
- Logout: Provide the ability to log out from an account.
- Account Deletion: Allow users to delete their account from the server.
- Display Contacts: Display a list of contacts along with their online status.
- Add Contact: Allow users to add other users to their contact list.
- View Contact Details: Show detailed information about a selected contact.
- One-on-One Communication: Facilitate one-on-one conversations with any user/contact.
- Group Chat Participation: Enable users to participate in group conversations.
- Set Presence Message: Allow users to set their presence message.
- Send/Receive Notifications: Provide the ability to send and receive notifications.
- File Transfer: Allow users to send and receive files.
The project's user interface is in the form of a Command-Line Interface (CLI).
The UserManager
class provides methods to manage user-related actions, including account registration, login, contact management, and presence updates. (All the methods includes a description with javadocs)
addPendingNotification(NotificationP notification)
: Adds a pending notification to the list.getPendingNotifications()
: Retrieves the list of pending notifications.- ...
The ChatManager
class handles user communication, including managing chat options and sending files.
manageChat(AbstractXMPPConnection connection)
: Manages user chat options.startChatWithContact(ChatManager chatManager, String contact)
: Initiates a one-on-one chat with a contact.- ...
The XMPP Chat Client offers a command-line interface for users to interact with the application. Users can register, log in, manage contacts, participate in one-on-one chats and group conversations, set presence messages, and send/receive files.
- Clone the repository.
- Install the necessary dependencies (see Dependencies).
- Compile and run the main application.
- Follow the on-screen prompts to interact with the XMPP Chat Client.
The XMPP Chat Client relies on the following libraries:
- Smack: Provides all the methods that I implemented
<dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-tcp</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-extensions</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-im</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-java7</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-experimental</artifactId> <version>4.2.0</version> </dependency>
PS. I created this README.md with the assistance of ChatGPT. I provided the necessary information and the desired format to generate the syntax of the file