aboutsummaryrefslogtreecommitdiff
path: root/telegram/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'telegram/client.go')
-rw-r--r--telegram/client.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/telegram/client.go b/telegram/client.go
index 49816db..6f6d719 100644
--- a/telegram/client.go
+++ b/telegram/client.go
@@ -2,6 +2,7 @@ package telegram
import (
"github.com/pkg/errors"
+ "hash/maphash"
"path/filepath"
"strconv"
"sync"
@@ -44,7 +45,7 @@ type DelayedStatus struct {
type Client struct {
client *client.Client
authorizer *clientAuthorizer
- parameters *client.TdlibParameters
+ parameters *client.SetTdlibParametersRequest
options []client.Option
me *client.User
@@ -52,6 +53,7 @@ type Client struct {
jid string
Session *persistence.Session
resources map[string]bool
+ outbox map[string]string
content *config.TelegramContentConfig
cache *cache.Cache
online bool
@@ -59,13 +61,22 @@ type Client struct {
DelayedStatuses map[int64]*DelayedStatus
DelayedStatusesLock sync.Mutex
- locks clientLocks
+ lastMsgHashes map[int64]uint64
+ msgHashSeed maphash.Seed
+
+ locks clientLocks
+ SendMessageLock sync.Mutex
}
type clientLocks struct {
- authorizationReady sync.WaitGroup
+ authorizationReady sync.Mutex
chatMessageLocks map[int64]*sync.Mutex
resourcesLock sync.Mutex
+ outboxLock sync.Mutex
+ lastMsgHashesLock sync.Mutex
+
+ authorizerReadLock sync.Mutex
+ authorizerWriteLock sync.Mutex
}
// NewClient instantiates a Telegram App
@@ -92,7 +103,7 @@ func NewClient(conf config.TelegramConfig, jid string, component *xmpp.Component
datadir = "./sessions/" // ye olde defaute
}
- parameters := client.TdlibParameters{
+ parameters := client.SetTdlibParametersRequest{
UseTestDc: false,
DatabaseDirectory: filepath.Join(datadir, jid),
@@ -121,10 +132,13 @@ func NewClient(conf config.TelegramConfig, jid string, component *xmpp.Component
jid: jid,
Session: session,
resources: make(map[string]bool),
+ outbox: make(map[string]string),
content: &conf.Content,
cache: cache.NewCache(),
options: options,
DelayedStatuses: make(map[int64]*DelayedStatus),
+ lastMsgHashes: make(map[int64]uint64),
+ msgHashSeed: maphash.MakeSeed(),
locks: clientLocks{
chatMessageLocks: make(map[int64]*sync.Mutex),
},