How shonix/chitchatserver works
ChitChat is a distributed terminal chat service. A user joins with a username, sends messages through a bidirectional gRPC stream, and receives broadcasts from other participants. The server registers streams, validates messages, updates Lamport timestamps, and broadcasts join, chat, and leave events; clients update their own clocks and display received messages. The protobuf contract defines the streamed message and RPC. Logging and graceful server shutdown are supporting runtime capabilities. The README documents these features; links below reflect the sampled client and server code.
Main entry points: server.go Chat stream handler · client.go Client send and display · proto_grpc.pb.go Generated server dispatch · proto.proto Stream message contract
Components 15
Terminal clients
- Client entry
client/client.go - Input and validation
client/client.go - Client Lamport clock
client/client.go - Client send and display
client/client.go - Client logging
client/client.go
Chat service
- Server entry
server/server.go - Chat stream handler
server/server.go - Server Lamport clock
server/server.go - Client stream registry
server/server.go - Event broadcast
server/server.go - Structured logging
server/server.go
gRPC contract
- Generated client RPC
grpc/proto_grpc.pb.go - Generated server dispatch
grpc/proto_grpc.pb.go - Stream message contract
grpc/proto.proto
Other components
- Chat user
Connections 20
- Chat user → Client entry: starts client
- Chat user → Input and validation: enters messages
- Client entry → Generated client RPC: opens stream
- Client entry → Client send and display: starts receive loop
- Input and validation → Client send and display: submits text
- Client send and display → Client Lamport clock: timestamps sends
- Client send and display → Generated client RPC: sends and receives
- Input and validation → Client logging: logs rejections
- Client send and display → Client logging: logs activity
- Generated client RPC → Stream message contract: encodes stream
- Stream message contract → Generated server dispatch: defines stream
- Server entry → Generated server dispatch: registers handler
- Server entry → Structured logging: logs lifecycle
- Generated server dispatch → Chat stream handler: dispatches RPC
- Chat stream handler → Server Lamport clock: updates timestamps
- Chat stream handler → Client stream registry: registers streams
- Chat stream handler → Event broadcast: broadcasts events
- Chat stream handler → Structured logging: logs events
- Event broadcast → Client stream registry: reads streams
- Event broadcast → Generated server dispatch: sends stream messages