From ade40206258717c04f16c3c9d345bd1943764236 Mon Sep 17 00:00:00 2001 From: Chteufleur Date: Tue, 19 Apr 2016 17:12:36 +0200 Subject: [PATCH] Add multi connected client support for one account --- gateway/gateway.go | 19 ++++++++++--------- gateway/xmpp.go | 33 +++++++++++++++++++++++++-------- main.go | 2 +- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/gateway/gateway.go b/gateway/gateway.go index 9047ac6..ecb5a1d 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -14,17 +14,18 @@ var ( type GatewayInfo struct { // Steam - SteamLogin string - SteamPassword string - SteamLoginInfo *steam.LogOnDetails - SteamClient *steam.Client - SentryFile string - FriendSteamId map[string]struct{} - SteamConnecting bool + SteamLogin string + SteamPassword string + SteamLoginInfo *steam.LogOnDetails + SteamClient *steam.Client + SentryFile string + FriendSteamId map[string]struct{} + SteamConnecting bool // XMPP - XMPP_JID_Client string - XMPP_Out chan interface{} + XMPP_JID_Client string + XMPP_Out chan interface{} + XMPP_Connected_Client map[string]bool } func (g *GatewayInfo) Run() { diff --git a/gateway/xmpp.go b/gateway/xmpp.go index 20b5c6a..bd1c06a 100644 --- a/gateway/xmpp.go +++ b/gateway/xmpp.go @@ -45,6 +45,16 @@ func (g *GatewayInfo) ReceivedXMPP_Presence(presence *xmpp.Presence) { transfertPresence := false + jid := strings.SplitN(presence.From, "/", 2) + if len(jid) == 2 { + // Resource exist —> client speaking + if presence.Type == Type_available { + g.XMPP_Connected_Client[presence.From] = true + } else if presence.Type == Type_unavailable { + delete(g.XMPP_Connected_Client, presence.From) + } + } + if presence.Type == Type_subscribe { // Send presence to tell that the JID has been added to roster g.SendXmppPresence("", Type_subscribed, presence.To, g.XMPP_JID_Client, "") @@ -56,11 +66,12 @@ func (g *GatewayInfo) ReceivedXMPP_Presence(presence *xmpp.Presence) { // Destination is gateway itself if presence.Type == Type_unavailable { // Disconnect - // TODO multi client connected management - g.XMPP_Disconnect() - go g.SteamDisconnect() + if len(g.XMPP_Connected_Client) <= 0 { + g.XMPP_Disconnect() + go g.SteamDisconnect() + } } else if presence.Type == Type_available { - // TODO multi client connected management + g.XMPP_Connect() go g.SteamConnect() transfertPresence = true } @@ -69,11 +80,12 @@ func (g *GatewayInfo) ReceivedXMPP_Presence(presence *xmpp.Presence) { // Destination is Steam user if presence.Type == Type_unavailable { // Disconnect - // TODO multi client connected management - g.XMPP_Disconnect() - go g.SteamDisconnect() + if len(g.XMPP_Connected_Client) <= 0 { + g.XMPP_Disconnect() + go g.SteamDisconnect() + } } else if presence.Type == Type_available { - // TODO multi client connected management + g.XMPP_Connect() go g.SteamConnect() transfertPresence = true } @@ -112,7 +124,12 @@ func (g *GatewayInfo) ReceivedXMPP_Message(message *xmpp.Message) { g.SendSteamMessage(steamID, message.Subject+"\n"+message.Body) } +func (g *GatewayInfo) XMPP_Connect() { + // TODO multi client connected management +} + func (g *GatewayInfo) XMPP_Disconnect() { +// TODO multi client connected management g.SendXmppPresence(Status_offline, Type_unavailable, "", "", "") } diff --git a/main.go b/main.go index 5562446..c1679ec 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,7 @@ import ( ) const ( - Version = "go-xmpp4steam v0.3.3" + Version = "go-xmpp4steam v0.3.4" configurationFilePath = "xmpp4steam.cfg" )