1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-07-01 08:38:32 +00:00

Add TwitchUsername to ClientInfo

This commit is contained in:
Kane York 2015-10-24 21:42:16 -07:00
parent 6681c1d64b
commit 9a1d1b720d
2 changed files with 24 additions and 12 deletions

View file

@ -5,8 +5,13 @@ import (
"log"
)
var EmptyClientMessage ClientMessage = ClientMessage{}
func HandleHello(conn *websocket.Conn, client *ClientInfo, msg ClientMessage) (rmsg ClientMessage, err error) {
version, clientId, err := msg.ArgumentsAsTwoStrings()
if err != nil {
return EmptyClientMessage, nil
}
client.Version = version
client.ClientID = uuid.FromStringOrNil(clientId)
@ -20,6 +25,7 @@ func HandleHello(conn *websocket.Conn, client *ClientInfo, msg ClientMessage) (r
}
func HandleSetUser(conn *websocket.Conn, client *ClientInfo, msg ClientMessage) (rmsg ClientMessage, err error) {
username, err := msg.ArgumentsAsString()
return ClientMessage{}, nil
}

View file

@ -32,8 +32,8 @@ type ClientMessage struct {
// When replying to a command, the message ID must be echoed.
// When sending a server-initiated message, this is -1.
MessageID int
// The command that the client wants from the server.
// When sent from the server, the literal string 'True' indicates success.
// The command that the client wants from the server.
// When sent from the server, the literal string 'True' indicates success.
// Before sending, a blank Command will be converted into SuccessCommand.
Command Command
//
@ -43,28 +43,34 @@ type ClientMessage struct {
type ClientInfo struct {
// The client ID.
// This must be written once by the owning goroutine before the struct is passed off to any other goroutines.
ClientID uuid.UUID
ClientID uuid.UUID
// The client's version.
// This must be written once by the owning goroutine before the struct is passed off to any other goroutines.
Version string
Version string
// This mutex protects writable data in this struct.
// If it seems to be a performance problem, we can split this.
Mutex sync.Mutex
Mutex sync.Mutex
// The client's claimed username on Twitch.
TwitchUsername string
// Whether or not the server has validated the client's claimed username.
UsernameValidated bool
// The list of chats this client is currently in.
// Protected by Mutex
CurrentChannels []string
CurrentChannels []string
// Server-initiated messages should be sent here
MessageChannel chan<- ClientMessage
MessageChannel chan <- ClientMessage
}
// A function that is called to respond to a Command.
type CommandHandler func(*websocket.Conn, *ClientInfo, ClientMessage) (ClientMessage, error)
var CommandHandlers = map[Command]CommandHandler {
var CommandHandlers = map[Command]CommandHandler{
HelloCommand: HandleHello,
"get_display_name": HandleGetDisplayName,
"sub": HandleSub,
@ -154,7 +160,7 @@ func HandleSocketConnection(conn *websocket.Conn) {
_errorChan := make(chan error)
// Receive goroutine
go func(errorChan chan<- error, clientChan chan<- ClientMessage) {
go func(errorChan chan <- error, clientChan chan <- ClientMessage) {
var msg ClientMessage
var err error
for ; err == nil; err = FFZCodec.Receive(conn, &msg) {
@ -180,13 +186,11 @@ func HandleSocketConnection(conn *websocket.Conn) {
for {
select {
case err := <-errorChan:
// note - socket might not be open at this point
// don't care
FFZCodec.Send(conn, ClientMessage{
MessageID: -1,
Command: "error",
Arguments: err.Error(),
})
}) // note - socket might be closed, but don't care
break RunLoop
case msg := <-clientChan:
if client.Version == "" && msg.Command != HelloCommand {
@ -206,6 +210,8 @@ func HandleSocketConnection(conn *websocket.Conn) {
continue
}
log.Println(conn.RemoteAddr(), msg.MessageID, msg.Command, msg.Arguments)
client.Mutex.Lock()
response, err := CallHandler(handler, conn, &client, msg)
client.Mutex.Unlock()