Ubiety is an extensible XMPP library written in C# to be easy and powerful.
- First, thanks to Dieter Lunn for his great ubiety xmpp library
- This fork is designed to work with Windows 8 and .netCore
- It is used, as is, in the "Chat" application in the Windows 8 Store
- The library is based on an event driven concept and multi-instancable
- The keepalive functionality is not tested at the time of writing
- Windows 8 rejects connections with invalid or unknown self signed SSL certificates
For basic usage you only need to create an instance of the Client interface
using XMPP;
XMPP.Client Client = new XMPP.Client();
OnError // An error occured
OnLogMessage // Debugging output ( most messages only work in debug configuration)
OnDisconnected // The client is disconnected
OnConnected // The client is connected
OnResourceBound // The client received a resource ID from the server
OnReady // The client is now logged in and ready
OnReceive // The client received a tag with user relevant data
OnNewTag // The client received a tag ( connection relevant and user relevant )
Version // Which version of the client this is
Settings // Change the values in this object to define how the client should behave
Connected // Boolean value to determine if the client is connected
Socket // You can overwrite the internally created socket with your own
ProcessComplete // ManualResetEvent to wait for the client to process all received data
Connect() // Connect with the already supplied settings
Disconnect() // Disconnect
Send(Tag tag) // Send a tag
Id // The client Jabber ID ( can be supplied as string )
Password // The password to connect
Hostname // The host to connect
Port // The port to connect
AuthenticationTypes // Which authentication methods will be supported (OAUTH2 not yet implemented)
SSL // Connect and Upgrade to SSL if available
OldSSL // Connect directly with SSL ( SSL has to be enabled too )
UseKeepAlive // Enable keepalives ( not tested )
KeepAliveTime // Keepalive interval
XMPP.Client Client = new XMPP.Client();
Client.Settings.Hostname = "example.com";
Client.Settings.SSL = false;
Client.Settings.OldSSL = false;
Client.Settings.Port = 5222;
Client.Settings.Id = "[email protected]";
Client.Settings.Password = "userpassword";
Client.Connect();
var message = new XMPP.tags.jabber.client.message();
message.to = "[email protected]";
message.from = "[email protected]";
message.type = XMPP.tags.jabber.client.message.typeEnum.chat;
var body = new XMPP.tags.jabber.client.body();
body.Value = "Hi!";
message.Add(body);
Client.Send(message);
// OnReceive handler
private void OnReceive(object sender, TagEventArgs e)
{
if( e.tag is XMPP.tags.jabber.client.message )
{
// Further processing
ProcessMessage(e.tag as XMPP.tags.jabber.client.message);
}
}
// Definition of TagHandler ( bool defines return type of Process functions ).
// When Process is called from outside, TagHandler automatically
// calls the Process function with the matching tag type ( if available).
public class Interpreter : XMPP.tags.TagHandler<bool>
{
private bool Process(XMPP.tags.jabber.client.message message)
{
return ProcessMessage(message); // Further processing
}
private bool Process(XMPP.tags.jabber.client.presence presence)
{
return ProcessPresence(presence); // Further processing
}
}
// Interpreter creation
Interpreter myInterpreter = new Interpreter();
// OnReceive handler
private void OnReceive(object sender, TagEventArgs e)
{
myInterpreter.Process(e.tag);
}