mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-04-15 08:30:36 +03:00
Aesthetic tweaking mostly;
This commit is contained in:
parent
1041ae3dda
commit
b335fea2b0
18
client.go
18
client.go
@ -30,7 +30,14 @@ func NewClient(server *Server, name string) *Client {
|
|||||||
func (c *Client) handleShell(channel ssh.Channel) {
|
func (c *Client) handleShell(channel ssh.Channel) {
|
||||||
defer channel.Close()
|
defer channel.Close()
|
||||||
|
|
||||||
term := terminal.NewTerminal(channel, "")
|
prompt := fmt.Sprintf("%s> ", c.Name)
|
||||||
|
term := terminal.NewTerminal(channel, prompt)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for msg := range c.Msg {
|
||||||
|
term.Write([]byte(msg))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
line, err := term.ReadLine()
|
line, err := term.ReadLine()
|
||||||
@ -43,8 +50,9 @@ func (c *Client) handleShell(channel ssh.Channel) {
|
|||||||
channel.Close()
|
channel.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
term.Write(term.Escape.Reset)
|
||||||
msg := fmt.Sprintf("%s: %s\r\n", c.Name, line)
|
msg := fmt.Sprintf("%s: %s\r\n", c.Name, line)
|
||||||
c.Server.Broadcast(msg)
|
c.Server.Broadcast(msg, c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,12 +88,6 @@ func (c *Client) handleChannels(channels <-chan ssh.NewChannel) {
|
|||||||
|
|
||||||
go c.handleShell(channel)
|
go c.handleShell(channel)
|
||||||
|
|
||||||
go func() {
|
|
||||||
for msg := range c.Msg {
|
|
||||||
channel.Write([]byte(msg))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// We don't care about other channels?
|
// We don't care about other channels?
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -43,9 +43,12 @@ func NewServer(privateKey []byte) (*Server, error) {
|
|||||||
return &server, nil
|
return &server, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Broadcast(msg string) {
|
func (s *Server) Broadcast(msg string, except *Client) {
|
||||||
logger.Debugf("Broadcast to %d: %s", len(s.clients), strings.TrimRight(msg, "\r\n"))
|
logger.Debugf("Broadcast to %d: %s", len(s.clients), strings.TrimRight(msg, "\r\n"))
|
||||||
for _, client := range s.clients {
|
for _, client := range s.clients {
|
||||||
|
if except != nil && client == *except {
|
||||||
|
continue
|
||||||
|
}
|
||||||
client.Msg <- msg
|
client.Msg <- msg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,9 +91,10 @@ func (s *Server) Start(laddr string) error {
|
|||||||
|
|
||||||
s.lock.Lock()
|
s.lock.Lock()
|
||||||
s.clients = append(s.clients, *client)
|
s.clients = append(s.clients, *client)
|
||||||
|
num := len(s.clients)
|
||||||
s.lock.Unlock()
|
s.lock.Unlock()
|
||||||
|
|
||||||
s.Broadcast(fmt.Sprintf("* Joined: %s", client.Name))
|
s.Broadcast(fmt.Sprintf("* Joined: %s (%d present)\r\n", client.Name, num), nil)
|
||||||
|
|
||||||
go client.handleChannels(channels)
|
go client.handleChannels(channels)
|
||||||
}()
|
}()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user