ryanrolds / club Goto Github PK
View Code? Open in Web Editor NEWWeb RTC video conferencing service.
License: MIT License
Web RTC video conferencing service.
License: MIT License
Update Group to send join and leave messages from Event Bus. Update Group to relay Answers and ICECandidate to the correct Peer.
Create an Event Bus and interface for consumers to implement. Update Room and Groups to implement the consumer interface. When setting up Rooms and groups bind as consumers. Ensure Room and Groups have reference to Event bus for publishing messages. Event Bus should give consumers a channel and consumers should consumer channel messages in a loop.
Add the notion of groups to the Room struct. When a user sends a join event, allow them to specify a group ID. Add the user to the group and only dispatch the joins and leave events to members of that group. If a group is not specified, add them to a catch-all default group.
Using cleanenv create a new configuration struct that gets env vars, room, group, and module configuration details.
We only need to work around port, log level, and group id & limit for the time being. The group details should be array of key+value pairs in the yaml file. The yaml file will be the bases for future configuration details.
The initial view of the app should be a single color with a centered text "Loading..." and maybe an animated loading image. Once the Redux state has connected=true
then change the text to "Joining...". Once the joined room event is received, switch to the room view.
Handle SIGINT/SIGTERM and gracefully shutdown the service quickly.
The shutdown process must:
Goal: Create a concise example that shares a screen/application w/ audio. Determine if it's possible to share audio without sharing a screen. Preferably we could share audio from a specific application.
Copy static/example/local.html
and make a new example HTML file for sharing. Expand the new HTML file to support sharing a screen and audio.
Examples of screen and audio sharing:
Update the messaging between groups and peers to use channels.
Add a method to Room to register modules during start. Store the modules in a new map in the Room struct. When an instance of the module is registered the Room logic should call a method on the module and pass the room to it so the module can do whatever prep it needs (like add itself to the groups). Make sure to define any interfaces and create any counterfeiter mocks needed to test.
Logrus has recently been put into maintenance mode. Replace Logrus with Zap. When the ENV env var is local, output more human-readable (non-JSON) logs to STDOUT. When non-local, output JSON.
If possible, colorize the more human-readable output (ConsoleEncoder). Also try to include function, filename, and line number in the output (currently being outputted with Logrus).
The KJ user story at https://ryanolds.invisionapp.com/freehand/Club-UI-wireframe-pRcN8AczK?v=Hke6bxk5AxtHMnISD960OQ%3D%3D&linkshare=urlcopied is just a stub. Talk with the team in Discord and build out the KJ user story.
What does the KJ see when they first access the room?
How do they manage and advance the queue?
What do they see when they advance the queue?
Should the KJ and singer have a 1-on-1 before being broadcasted to everyone in the room?
What audio controls do they need to improve audio quality?
What controls should we provide to the KJ so they can handle a "singer" ranting about 5G/fluoride?
If you need access to InVision send @ryanrolds your email address.
Before showing the room view, show a view asking for the user's name/handle. Store the name in the Redux state. Create a new message that sends the name to the signaling server. The signaling server should add the name to WebSocketPeer struct for that peer. The signaling server shouldn't allow users without a name set to join a room.
I currently get the following error when attempting to connect to localhost:3001/room:
club_1 | {"file":"server.go:29","func":"ServeHTTP","level":"error","msg":"problem upgrading to websockets: websocket: request origin not allowed by Upgrader.CheckOrigin","time":"2020-05-26T06:33:33Z"}
This is when I'm on localhost:3000 for frontend.
Steps to reproduce:
I'm kinda brain dumping since its the end of the night.
The websocket implementation (Gorilla) in Go is safe defaulting where the origin is being sent from the client when viewing from Chrome as file:// which does not match the host request header. The CheckOrigin function stub can be found here
It's currently returning true (allowing all Origin headers).
It would be good to allow localhost:* or any origins in a list supplied by env var.
Investigate, correct, and document Safari limitations. After adding the Event Target shim in #27, I'm seeing a black video box if I open multiple tabs to http://localhost:3001/ in multiple tabs in Safari.
We need to better understand Safari's media device, Web RTC, and Web Audio limitations.
Once we a better understanding of the limits we can decide how much support we can offer at this time.
Copy static/example/local.html
and create a proof-of-concept prototype that demonstrates transforming inbound/outbound audios stream with Web Audio API. Reading Basic concepts behind Web Audio API is recommended.
Create 1-3 basic controls that change the transform(s) in real-time.
Make the Group view better. Start by making the video/peers shown by the MemberList component form a grid. Make sure the grid display things a pretty way and that the grid can accommodate 25 people (5x5). The grid should resize and try to keep the dimensions a square with the last being the odd row with fewer when necessary. When showing less than 4 people try to display in a single row.
Implement the first view in the "Joining Club story". Create handlers for clicking a seat, but don't worry about actually joining the room. We just want to get the UI in place. Once the signaling server supports groups we will wire up the join and leave logic. This view should be the home/first view of the React app.
We need a way to clean up the env before running install. This should remove node modules and whatever go cleanup needs to be done to restore it to a clean slate.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.