Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
client
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
elixxir
client
Commits
d6d8e637
Commit
d6d8e637
authored
3 years ago
by
Jake Taylor
Browse files
Options
Downloads
Patches
Plain Diff
improvements
parent
f5fa0d0c
Branches
Branches containing commit
Tags
Tags containing commit
4 merge requests
!510
Release
,
!207
WIP: Client Restructure
,
!203
Symmetric broadcast
,
!194
refactor send group chat code
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
groupChat/manager.go
+13
-15
13 additions, 15 deletions
groupChat/manager.go
groupChat/receive.go
+1
-1
1 addition, 1 deletion
groupChat/receive.go
groupChat/receiveRequest.go
+1
-1
1 addition, 1 deletion
groupChat/receiveRequest.go
groupChat/send.go
+11
-31
11 additions, 31 deletions
groupChat/send.go
with
26 additions
and
48 deletions
groupChat/manager.go
+
13
−
15
View file @
d6d8e637
...
@@ -13,7 +13,6 @@ import (
...
@@ -13,7 +13,6 @@ import (
"gitlab.com/elixxir/client/catalog"
"gitlab.com/elixxir/client/catalog"
"gitlab.com/elixxir/client/e2e"
"gitlab.com/elixxir/client/e2e"
gs
"gitlab.com/elixxir/client/groupChat/groupStore"
gs
"gitlab.com/elixxir/client/groupChat/groupStore"
"gitlab.com/elixxir/client/interfaces"
"gitlab.com/elixxir/client/network"
"gitlab.com/elixxir/client/network"
"gitlab.com/elixxir/client/network/message"
"gitlab.com/elixxir/client/network/message"
"gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/client/storage/versioned"
...
@@ -33,7 +32,6 @@ const (
...
@@ -33,7 +32,6 @@ const (
// Manager handles the list of groups a user is a part of.
// Manager handles the list of groups a user is a part of.
type
Manager
struct
{
type
Manager
struct
{
e2e
e2e
.
Handler
e2e
e2e
.
Handler
net
interfaces
.
NetworkManager
receptionId
*
id
.
ID
receptionId
*
id
.
ID
rng
*
fastRNG
.
StreamGenerator
rng
*
fastRNG
.
StreamGenerator
...
@@ -46,13 +44,13 @@ type Manager struct {
...
@@ -46,13 +44,13 @@ type Manager struct {
}
}
// NewManager creates a new group chat manager
// NewManager creates a new group chat manager
func
NewManager
(
services
network
.
Manager
,
e2e
e2e
.
Handler
,
net
interfaces
.
NetworkManager
,
receptionId
*
id
.
ID
,
func
NewManager
(
services
network
.
Manager
,
e2e
e2e
.
Handler
,
receptionId
*
id
.
ID
,
rng
*
fastRNG
.
StreamGenerator
,
grp
*
cyclic
.
Group
,
userDhKey
*
cyclic
.
Int
,
rng
*
fastRNG
.
StreamGenerator
,
grp
*
cyclic
.
Group
,
kv
*
versioned
.
KV
,
kv
*
versioned
.
KV
,
requestFunc
RequestCallback
,
receiveFunc
ReceiveCallback
)
(
*
Manager
,
error
)
{
requestFunc
RequestCallback
,
receiveFunc
ReceiveCallback
)
(
*
Manager
,
error
)
{
// Load the group chat storage or create one if one does not exist
// Load the group chat storage or create one if one does not exist
gStore
,
err
:=
gs
.
NewOrLoadStore
(
gStore
,
err
:=
gs
.
NewOrLoadStore
(
kv
,
group
.
Member
{
ID
:
receptionId
,
DhKey
:
userDhKey
})
kv
,
group
.
Member
{
ID
:
receptionId
,
DhKey
:
e2e
.
GetDefaultHistoricalDHPubkey
()
})
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Errorf
(
newGroupStoreErr
,
err
)
return
nil
,
errors
.
Errorf
(
newGroupStoreErr
,
err
)
}
}
...
@@ -60,7 +58,6 @@ func NewManager(services network.Manager, e2e e2e.Handler, net interfaces.Networ
...
@@ -60,7 +58,6 @@ func NewManager(services network.Manager, e2e e2e.Handler, net interfaces.Networ
// Define the manager object
// Define the manager object
m
:=
&
Manager
{
m
:=
&
Manager
{
e2e
:
e2e
,
e2e
:
e2e
,
net
:
net
,
rng
:
rng
,
rng
:
rng
,
receptionId
:
receptionId
,
receptionId
:
receptionId
,
grp
:
grp
,
grp
:
grp
,
...
@@ -87,16 +84,13 @@ func NewManager(services network.Manager, e2e e2e.Handler, net interfaces.Networ
...
@@ -87,16 +84,13 @@ func NewManager(services network.Manager, e2e e2e.Handler, net interfaces.Networ
continue
continue
}
}
err
=
m
.
JoinGroup
(
g
)
m
.
joinGroup
(
g
)
if
err
!=
nil
{
return
nil
,
err
}
}
}
return
m
,
nil
return
m
,
nil
}
}
// JoinGroup adds the group to
the list of group chats th
e
u
ser
is a part of
.
// JoinGroup adds the group to
storage, and enables requisit
e ser
vices
.
// An error is returned if the user is already part of the group or if the
// An error is returned if the user is already part of the group or if the
// maximum number of groups have already been joined.
// maximum number of groups have already been joined.
func
(
m
Manager
)
JoinGroup
(
g
gs
.
Group
)
error
{
func
(
m
Manager
)
JoinGroup
(
g
gs
.
Group
)
error
{
...
@@ -104,15 +98,19 @@ func (m Manager) JoinGroup(g gs.Group) error {
...
@@ -104,15 +98,19 @@ func (m Manager) JoinGroup(g gs.Group) error {
return
errors
.
Errorf
(
joinGroupErr
,
g
.
ID
,
err
)
return
errors
.
Errorf
(
joinGroupErr
,
g
.
ID
,
err
)
}
}
m
.
joinGroup
(
g
)
jww
.
DEBUG
.
Printf
(
"Joined group %q with ID %s."
,
g
.
Name
,
g
.
ID
)
return
nil
}
// joinGroup adds the group services
func
(
m
Manager
)
joinGroup
(
g
gs
.
Group
)
{
newService
:=
message
.
Service
{
newService
:=
message
.
Service
{
Identifier
:
g
.
ID
[
:
],
Identifier
:
g
.
ID
[
:
],
Tag
:
catalog
.
Group
,
Tag
:
catalog
.
Group
,
Metadata
:
g
.
ID
[
:
],
Metadata
:
g
.
ID
[
:
],
}
}
m
.
services
.
AddService
(
m
.
receptionId
,
newService
,
&
receptionProcessor
{
m
:
&
m
,
g
:
g
})
m
.
services
.
AddService
(
m
.
receptionId
,
newService
,
&
receptionProcessor
{
m
:
&
m
,
g
:
g
})
jww
.
DEBUG
.
Printf
(
"Joined group %q with ID %s."
,
g
.
Name
,
g
.
ID
)
return
nil
}
}
// LeaveGroup removes a group from a list of groups the user is a part of.
// LeaveGroup removes a group from a list of groups the user is a part of.
...
...
This diff is collapsed.
Click to expand it.
groupChat/receive.go
+
1
−
1
View file @
d6d8e637
...
@@ -76,7 +76,7 @@ func (p *receptionProcessor) Process(message format.Message, receptionID recepti
...
@@ -76,7 +76,7 @@ func (p *receptionProcessor) Process(message format.Message, receptionID recepti
p
.
g
.
ID
,
result
.
Timestamp
)
p
.
g
.
ID
,
result
.
Timestamp
)
// If the message was read correctly, send it to the callback
// If the message was read correctly, send it to the callback
go
p
.
m
.
receiveFunc
(
result
)
p
.
m
.
receiveFunc
(
result
)
}
}
// decryptMessage decrypts the group message payload and returns its message ID,
// decryptMessage decrypts the group message payload and returns its message ID,
...
...
This diff is collapsed.
Click to expand it.
groupChat/receiveRequest.go
+
1
−
1
View file @
d6d8e637
...
@@ -47,7 +47,7 @@ func (l *requestListener) Hear(item receive.Message) {
...
@@ -47,7 +47,7 @@ func (l *requestListener) Hear(item receive.Message) {
jww
.
DEBUG
.
Printf
(
"Received group request for "
+
jww
.
DEBUG
.
Printf
(
"Received group request for "
+
"group %s with ID %s."
,
g
.
Name
,
g
.
ID
)
"group %s with ID %s."
,
g
.
Name
,
g
.
ID
)
go
l
.
m
.
requestFunc
(
g
)
l
.
m
.
requestFunc
(
g
)
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
groupChat/send.go
+
11
−
31
View file @
d6d8e637
...
@@ -66,7 +66,7 @@ func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, gro
...
@@ -66,7 +66,7 @@ func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, gro
// Send all the groupMessages
// Send all the groupMessages
param
:=
network
.
GetDefaultCMIXParams
()
param
:=
network
.
GetDefaultCMIXParams
()
param
.
DebugTag
=
"group.Message"
param
.
DebugTag
=
"group.Message"
rid
,
_
,
err
:=
m
.
net
.
SendManyCMIX
(
groupMessages
,
param
)
rid
,
_
,
err
:=
m
.
services
.
SendManyCMIX
(
groupMessages
,
param
)
if
err
!=
nil
{
if
err
!=
nil
{
return
0
,
time
.
Time
{},
group
.
MessageID
{},
return
0
,
time
.
Time
{},
group
.
MessageID
{},
errors
.
Errorf
(
sendManyCmixErr
,
m
.
receptionId
,
groupID
,
err
)
errors
.
Errorf
(
sendManyCmixErr
,
m
.
receptionId
,
groupID
,
err
)
...
@@ -80,45 +80,25 @@ func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, gro
...
@@ -80,45 +80,25 @@ func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, gro
// newMessages quickly builds messages for all group chat members in multiple threads
// newMessages quickly builds messages for all group chat members in multiple threads
func
(
m
*
Manager
)
newMessages
(
g
gs
.
Group
,
msg
[]
byte
,
timestamp
time
.
Time
)
(
func
(
m
*
Manager
)
newMessages
(
g
gs
.
Group
,
msg
[]
byte
,
timestamp
time
.
Time
)
(
[]
network
.
TargetedCmixMessage
,
error
)
{
[]
network
.
TargetedCmixMessage
,
error
)
{
// Create channels to receive messages and errors on
msgChan
:=
make
(
chan
network
.
TargetedCmixMessage
,
len
(
g
.
Members
)
-
1
)
// Create list of cMix messages
errChan
:=
make
(
chan
error
,
len
(
g
.
Members
)
-
1
)
messages
:=
make
([]
network
.
TargetedCmixMessage
,
0
,
len
(
g
.
Members
))
rng
:=
m
.
rng
.
GetStream
()
defer
rng
.
Close
()
// Create cMix messages in parallel
// Create cMix messages in parallel
for
i
,
member
:=
range
g
.
Members
{
for
_
,
member
:=
range
g
.
Members
{
// Do not send to the sender
// Do not send to the sender
if
m
.
receptionId
.
Cmp
(
member
.
ID
)
{
if
m
.
receptionId
.
Cmp
(
member
.
ID
)
{
continue
continue
}
}
// Start thread to build cMix message
go
func
(
member
group
.
Member
,
i
int
)
{
// Create new stream
rng
:=
m
.
rng
.
GetStream
()
defer
rng
.
Close
()
// Add cMix message to list
// Add cMix message to list
cMixMsg
,
err
:=
newCmixMsg
(
g
,
msg
,
timestamp
,
member
,
rng
,
m
.
receptionId
,
m
.
grp
)
cMixMsg
,
err
:=
newCmixMsg
(
g
,
msg
,
timestamp
,
member
,
rng
,
m
.
receptionId
,
m
.
grp
)
if
err
!=
nil
{
if
err
!=
nil
{
errChan
<-
errors
.
Errorf
(
newCmixErr
,
i
,
member
.
ID
,
g
.
ID
,
err
)
}
msgChan
<-
cMixMsg
}(
member
,
i
)
}
// Create list of cMix messages
messages
:=
make
([]
network
.
TargetedCmixMessage
,
0
,
len
(
g
.
Members
))
// Wait for messages or errors
for
len
(
messages
)
<
len
(
g
.
Members
)
-
1
{
select
{
case
err
:=
<-
errChan
:
// Return on the first error that occurs
return
nil
,
err
return
nil
,
err
case
info
:=
<-
msgChan
:
messages
=
append
(
messages
,
info
)
}
}
messages
=
append
(
messages
,
cMixMsg
)
}
}
return
messages
,
nil
return
messages
,
nil
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment