Fixing the use of the Client interface & ditching the ClientStack interface
This commit is contained in:
parent
cb46154ec8
commit
95cd8f17b1
2 changed files with 14 additions and 6 deletions
|
@ -25,7 +25,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
client := server.FTPClient{}
|
client := server.FTPClient{}
|
||||||
client.SetStack(new(server.StringStack))
|
client.SetStack(server.MakeStringStack(30))
|
||||||
client.SetConnection(conn)
|
client.SetConnection(conn)
|
||||||
|
|
||||||
go server.HandleConnection(&client)
|
go server.HandleConnection(&client)
|
||||||
|
|
|
@ -2,21 +2,18 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ClientStack interface holds the function needed to work with a stack.
|
|
||||||
type ClientStack interface {
|
|
||||||
Stack() Stack // Returns the underlying Stack.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Client interface provides the blueprints for the Client that is used by the server.
|
// Client interface provides the blueprints for the Client that is used by the server.
|
||||||
type Client interface {
|
type Client interface {
|
||||||
Connection() net.Conn // Connection returns the connection stream.
|
Connection() net.Conn // Connection returns the connection stream.
|
||||||
SetConnection(conn net.Conn) // SetConnection sets the connection for the client.
|
SetConnection(conn net.Conn) // SetConnection sets the connection for the client.
|
||||||
Disconnect() // Disconnect closes the Client's connections and clears up resources.
|
Disconnect() // Disconnect closes the Client's connections and clears up resources.
|
||||||
|
Stack() Stack // Returns the underlying Stack.
|
||||||
}
|
}
|
||||||
|
|
||||||
// FTPClient represents a FTPClient connection, it holds a root cage and the underlying connection.
|
// FTPClient represents a FTPClient connection, it holds a root cage and the underlying connection.
|
||||||
|
@ -52,6 +49,17 @@ func (c *FTPClient) Disconnect() {
|
||||||
|
|
||||||
func HandleConnection(client Client) {
|
func HandleConnection(client Client) {
|
||||||
defer client.Disconnect()
|
defer client.Disconnect()
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
log.Println("PANIC: ", r)
|
||||||
|
|
||||||
|
recoveryError, ok := r.(string)
|
||||||
|
if ok {
|
||||||
|
io.WriteString(client.Connection(), fmt.Sprintf("PANIC: %s", recoveryError))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
io.WriteString(client.Connection(), "Hello and welcome to simple ftp\n")
|
io.WriteString(client.Connection(), "Hello and welcome to simple ftp\n")
|
||||||
|
|
||||||
log.Println(client.Connection().RemoteAddr(), "has connected.")
|
log.Println(client.Connection().RemoteAddr(), "has connected.")
|
||||||
|
|
Loading…
Reference in a new issue