Skip to content

Latest commit

 

History

History
57 lines (42 loc) · 1.6 KB

README.md

File metadata and controls

57 lines (42 loc) · 1.6 KB

Multilogue

Multilogue: non-simultaneous p2p chat protocol

Summary:

  • One user can speak in a channel at a time.
  • Users must request a transmission before starting their turn.
  • After certain conditions are met (time limit, message limit, etc), the user's turn ends.
  • The user can also voluntarily end their turn.
  • After each users turn, they are subject to a cooldown in which their requests are deprioritized.

How to use:

Clone the project make deps go build

./Multilogue -user {username} -channel {channel} : Create and join new channel.

Multiadress listed on title bar.

./Multilogue -user {username} -channel {channel} -host {multiaddress} : Join channel at that specific multiadress

Controls:

[Insert] : Start turn
[End] : End Turn
[CTRL+C] : Exit program

Multilogue Protocol Functions:

// Host functions
CreateChannel(clientPeer *Peer, channelId string, config *ChannelConfig)

// Client functions
JoinChannel(clientPeer *Peer, hostPeerID peer.ID, channelId string) 
LeaveChannel(clientPeer *Peer, hostPeerID peer.ID, channelId string)

SendTransmissionRequest(clientPeer *Peer, hostPeerID peer.ID, channelId string) 
EndTransmission(clientPeer *Peer, hostPeerID peer.ID, channelId string)

SendMessage(clientPeer *Peer, hostPeerID peer.ID, channelId string, message string)

Requests that require an asynchronous response are handled as follows

select {
    case <-request.success:
       ...
    case <-request.fail:
       ...
}

Each request channel returns a Response struct, which contains the rror code for the request.

See ui.go and main.go for examples.