54 lines
2.4 KiB
Markdown
54 lines
2.4 KiB
Markdown
|
|
# Task 7: WebSocket Signaling Server - Issues Encountered
|
|
|
|
## Build System Issues
|
|
- `libspa-sys` build script failed when running full cargo test due to missing PipeWire dev dependencies
|
|
- Solution: Used `cargo test --no-default-features` to skip PipeWire feature during testing
|
|
|
|
## Compilation Errors
|
|
|
|
### E0433: Unresolved Module `tungstenite`
|
|
- **Error**: Could not resolve `tungstenite::Error` type
|
|
- **Cause**: Import statement only imported specific items, not the full module
|
|
- **Solution**: Added `Error as WsError` to tokio_tungstenite imports
|
|
- **Pattern**: Use type aliasing for frequently used imported types
|
|
|
|
### E0599: No Method `next`
|
|
- **Error**: `WebSocketStream` didn't have `next()` method in scope
|
|
- **Cause**: Missing `StreamExt` trait from futures crate
|
|
- **Solution**: Added `use futures::StreamExt` to imports
|
|
- **Lesson**: WebSocketStream implements Sink and Stream traits from futures, both needed
|
|
|
|
### E0282: Type Annotations Needed
|
|
- **Error**: Compiler couldn't infer error types in closures
|
|
- **Affected locations**: `handle_client` message variable, multiple error closures
|
|
- **Solution**: Added explicit type annotations: `let msg: Message`, `|e: WsError|`
|
|
- **Pattern**: Async WebSocket code frequently requires explicit type annotations
|
|
|
|
### Missing Error Variant
|
|
- **Error**: Used `SignalingError::SessionNotFound` which doesn't exist
|
|
- **Root Cause**: Error exists in `WebRtcError` enum, not `SignalingError`
|
|
- **Solution**: Changed to `SignalingError::ProtocolError` with descriptive format string
|
|
- **Alternative**: Could add `SessionNotFound` variant to `SignalingError` enum
|
|
|
|
## Code Organization Issues
|
|
|
|
### Duplicate Struct Definition
|
|
- **Issue**: Initially had both placeholder and complete `SignalingServer` struct definitions
|
|
- **Cause**: Added new struct without removing old placeholder
|
|
- **Detection**: Compiler reported "unclosed delimiter" error
|
|
- **Solution**: Removed old placeholder struct definition
|
|
- **Prevention**: Always review file for duplicates before major edits
|
|
|
|
## Testing Considerations
|
|
|
|
### Port Conflicts
|
|
- **Issue**: Default port 8765 might conflict during concurrent test runs
|
|
- **Solution**: Used ephemeral ports (18765+) for test instances
|
|
- **Pattern**: Add test port offset (10000+) to default ports
|
|
|
|
### Dependency Testing
|
|
- **Issue**: Full build requires PipeWire system libraries
|
|
- **Solution**: Test with `--no-default-features` to test core functionality
|
|
- **Trade-off**: Can't test integration with features disabled
|