Skip to content

Commit b8e1c92

Browse files
committed
#27: add simple XMPP logger
1 parent 1366c3c commit b8e1c92

File tree

5 files changed

+1228
-729
lines changed

5 files changed

+1228
-729
lines changed

Ctor.Xmpp/Program.fs

Lines changed: 0 additions & 6 deletions
This file was deleted.

Ctor.Xmpp/Robot.fs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
namespace Ctor.Xmpp
2+
3+
open System
4+
open System.Threading
5+
6+
open Microsoft.Extensions.Logging
7+
open SharpXMPP
8+
open SharpXMPP.XMPP
9+
10+
type Robot(loggerFactory: ILoggerFactory,
11+
login: string,
12+
password: string,
13+
roomJid: string,
14+
nickname: string) =
15+
let logger = loggerFactory.CreateLogger<Robot>()
16+
let connection = new XmppClient(JID(login), password)
17+
18+
let connectionFailedHandler = XmppConnection.ConnectionFailedHandler(fun s e ->
19+
logger.LogError(e.ToString())
20+
Thread.Sleep(TimeSpan.FromSeconds(30.0)) // TODO[Friedrich]: Configurable timeout.
21+
())
22+
23+
let signedInHandler = XmppConnection.SignedInHandler(fun s e ->
24+
logger.LogInformation("Connecting to " + roomJid)
25+
SharpXmppHelper.joinRoom connection roomJid nickname)
26+
27+
let messageHandler = XmppConnection.MessageHandler(fun s e ->
28+
logger.LogInformation("<-" + e.ToString()))
29+
30+
let elementHandler = XmppConnection.ElementHandler(fun s e ->
31+
let arrow = if e.IsInput then "<-" else "->"
32+
logger.LogInformation(arrow + " " + e.ToString()))
33+
34+
do
35+
connection.add_ConnectionFailed(connectionFailedHandler)
36+
connection.add_SignedIn(signedInHandler)
37+
connection.add_Message(messageHandler)
38+
connection.add_Element(elementHandler)
39+
40+
interface IDisposable with
41+
member __.Dispose() = connection.Close()

Ctor.Xmpp/SharpXmppHelper.fs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module Ctor.Xmpp.SharpXmppHelper
2+
3+
open System.Xml.Linq
4+
5+
open SharpXMPP
6+
open SharpXMPP.XMPP.Client.MUC.Bookmarks.Elements
7+
8+
let private bookmark (roomJid: string) (nickname: string): BookmarkedConference =
9+
let room = BookmarkedConference()
10+
room.SetAttributeValue(XName.Get("jid"), roomJid)
11+
let nickElement = XElement(XName.Get("storage:bookmarks"), "nick", Value = nickname)
12+
room.Add(nickElement)
13+
room
14+
15+
let joinRoom (client: XmppClient) (roomJid: string) (nickname: string): unit =
16+
let room = bookmark roomJid nickname
17+
client.BookmarkManager.Join(room)

Ctor.Xmpp/project.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"compilerName": "fsc",
66
"compile": {
77
"includeFiles": [
8-
"Program.fs"
8+
"SharpXmppHelper.fs",
9+
"Robot.fs"
910
]
1011
},
1112
"preserveCompilationContext": true
@@ -14,11 +15,13 @@
1415
"netcoreapp1.0": {}
1516
},
1617
"dependencies": {
18+
"Microsoft.Extensions.Logging": "1.1.0",
19+
"Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629",
1720
"Microsoft.NETCore.App": {
1821
"type": "platform",
1922
"version": "1.0.1"
2023
},
21-
"Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629"
24+
"SharpXMPP.Shared": "0.0.1-pre01"
2225
},
2326
"tools": {
2427
"dotnet-compile-fsc": "1.0.0-preview2-*"

0 commit comments

Comments
 (0)