50 lines
1021 B
Go
50 lines
1021 B
Go
package state
|
|
|
|
import (
|
|
"dev.sum7.eu/genofire/yaja/server/extension"
|
|
"dev.sum7.eu/genofire/yaja/server/utils"
|
|
)
|
|
|
|
// SendingClient state
|
|
type SendingClient struct {
|
|
Next State
|
|
Client *utils.Client
|
|
}
|
|
|
|
// Process messages
|
|
func (state *SendingClient) Process() State {
|
|
state.Client.Log = state.Client.Log.WithField("state", "normal")
|
|
state.Client.Log.Debug("sending")
|
|
// sending
|
|
go func() {
|
|
select {
|
|
case msg := <-state.Client.Messages:
|
|
err := state.Client.Out.Encode(msg)
|
|
if err != nil {
|
|
state.Client.Log.Warn(err)
|
|
}
|
|
case <-state.Client.OnClose():
|
|
return
|
|
}
|
|
}()
|
|
state.Client.Log.Debug("receiving")
|
|
return state.Next
|
|
}
|
|
|
|
// ReceivingClient state
|
|
type ReceivingClient struct {
|
|
Extensions extension.Extensions
|
|
Client *utils.Client
|
|
}
|
|
|
|
// Process messages
|
|
func (state *ReceivingClient) Process() State {
|
|
element, err := state.Client.Read()
|
|
if err != nil {
|
|
state.Client.Log.Warn("unable to read: ", err)
|
|
return nil
|
|
}
|
|
state.Extensions.Process(element, state.Client)
|
|
return state
|
|
}
|