From 08c1c39c11c3330a07d38b907284a57b4f754252 Mon Sep 17 00:00:00 2001 From: Jono Wenger <jono@elixxir.io> Date: Mon, 2 May 2022 13:01:09 -0700 Subject: [PATCH] Add group chat file transfer manager --- fileTransfer2/groupChat/manager.go | 128 +++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 fileTransfer2/groupChat/manager.go diff --git a/fileTransfer2/groupChat/manager.go b/fileTransfer2/groupChat/manager.go new file mode 100644 index 000000000..b61314024 --- /dev/null +++ b/fileTransfer2/groupChat/manager.go @@ -0,0 +1,128 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2020 xx network SEZC // +// // +// Use of this source code is governed by a license that can be found in the // +// LICENSE file // +//////////////////////////////////////////////////////////////////////////////// + +package groupChat + +import ( + "github.com/pkg/errors" + ft "gitlab.com/elixxir/client/fileTransfer2" + "gitlab.com/elixxir/client/groupChat" + "gitlab.com/elixxir/client/stoppable" + "gitlab.com/elixxir/client/storage/versioned" + "gitlab.com/elixxir/crypto/fastRNG" + ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" + "gitlab.com/xx_network/primitives/id" + "time" +) + +// Error messages. +const ( + // NewManager + errNewFtManager = "cannot create new group chat file transfer manager: %+v" +) + +// manager handles the sending and receiving of file transfers for group chats. +type manager struct { + // Callback that is called every time a new file transfer is received + receiveCB ft.ReceiveCallback + + // File transfer manager + ft ft.FileTransfer + + // Group chat manager + gc groupChat.Manager + + myID *id.ID + cmix ft.Cmix +} + +// NewManager generates a new file transfer manager for group chat. +func NewManager(receiveCB ft.ReceiveCallback, params ft.Params, myID *id.ID, + gc groupChat.Manager, cmix ft.Cmix, kv *versioned.KV, + rng *fastRNG.StreamGenerator) (ft.FileTransfer, error) { + + sendNewCb := func(recipient *id.ID, info *ft.TransferInfo) error { + return nil + } + + sendEndCb := func(recipient *id.ID) { + + } + + ftManager, err := ft.NewManager( + sendNewCb, sendEndCb, params, myID, cmix, kv, rng) + if err != nil { + return nil, errors.Errorf(errNewFtManager, err) + } + + return &manager{ + receiveCB: receiveCB, + ft: ftManager, + gc: gc, + myID: myID, + cmix: cmix, + }, nil +} + +func (m manager) StartProcesses() (stoppable.Stoppable, error) { + // TODO implement me + panic("implement me") +} + +func (m manager) MaxFileNameLen() int { + return m.MaxFileNameLen() +} + +func (m manager) MaxFileTypeLen() int { + return m.MaxFileTypeLen() +} + +func (m manager) MaxFileSize() int { + return m.MaxFileSize() +} + +func (m manager) MaxPreviewSize() int { + return m.MaxPreviewSize() +} + +func (m manager) Send(fileName, fileType string, fileData []byte, + recipient *id.ID, retry float32, preview []byte, + progressCB ft.SentProgressCallback, period time.Duration) ( + *ftCrypto.TransferID, error) { + // TODO implement me + panic("implement me") +} + +func (m manager) RegisterSentProgressCallback(tid *ftCrypto.TransferID, + progressCB ft.SentProgressCallback, period time.Duration) error { + // TODO implement me + panic("implement me") +} + +func (m manager) CloseSend(tid *ftCrypto.TransferID) error { + // TODO implement me + panic("implement me") +} + +func (m manager) AddNew(fileName string, key *ftCrypto.TransferKey, + transferMAC []byte, numParts uint16, size uint32, retry float32, + progressCB ft.ReceivedProgressCallback, period time.Duration) ( + *ftCrypto.TransferID, error) { + // TODO implement me + panic("implement me") +} + +func (m manager) RegisterReceivedProgressCallback(tid *ftCrypto.TransferID, + progressCB ft.ReceivedProgressCallback, period time.Duration) error { + // TODO implement me + panic("implement me") +} + +func (m manager) Receive(tid *ftCrypto.TransferID) ([]byte, error) { + // TODO implement me + panic("implement me") +} -- GitLab