Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 3 - Phase 1 #423

Open
wants to merge 957 commits into
base: master
Choose a base branch
from
Open

Version 3 - Phase 1 #423

wants to merge 957 commits into from

Conversation

m1k1o
Copy link
Owner

@m1k1o m1k1o commented Sep 6, 2024

This is an implementation of Phase 1 of #371.

In the first phase only server is rewritten and legacy driver is added to ensure combatibility with the old API and config. Client will be only minimally changed to satisfy compatibility with the new workflow.

Currently not supported features

These features will be either deprecated or additional effort must be made to include them in the v3:

  • no BAN function - since v3 uses varius member providers, access control is part of them, not neko main codebase anymore - only available for users connected through legacy API.
  • no session ID for mute & unmute (shown as Somebody in GUI).
  • no session ID for locks when reloading page (shown as Somebody in GUI).
  • not sending DISCONNECT before KICK - webrtc destroy was delayed by 1sec.
  • last (admin|user) left at won't work for any provider that removed users after logout - implemented stats.
  • filetransfer enabled is sent after init and old implementation excepts it in the init - got the information directly from config..
  • 32bit ARM is not supported:
    panic: unaligned 64-bit atomic operation
    
    goroutine 169 [running]:
    runtime/internal/atomic.panicUnaligned()
    	/usr/local/go/src/runtime/internal/atomic/unaligned.go:8 +0x24
    runtime/internal/atomic.Store64(0x1f721ec, 0xfa73)
    	/usr/local/go/src/runtime/internal/atomic/atomic_arm.s:291 +0x14
    m1k1o/neko/internal/capture.(*StreamSinkManagerCtx).saveSampleBitrate(0x1f721e0, {0xc1af846f42633ee6, 0x7cccdb05f, 0x1534c68}, 0x40cc2c0000000000)
    	/src/internal/capture/streamsink.go:365 +0x19c
    m1k1o/neko/internal/capture.(*StreamSinkManagerCtx).onSample(0x1f721e0, {{0x1e64000
    2024-09-08 12:36:13,044 DEBG 'neko' stdout output:
    , 0x3858, 0x3858}, 0x3858, {0xc1af846f42633ee6, 0x7cccdb05f, 0x1534c68}, 0xa7e0b6, 0x1})
    	/src/internal/capture/streamsink.go:381 +0xb8
    m1k1o/neko/internal/capture.(*StreamSinkManagerCtx).CreatePipeline.func1()
    	/src/internal/capture/streamsink.go:343 +0xd4
    created by m1k1o/neko/internal/capture.(*StreamSinkManagerCtx).CreatePipeline in goroutine 21
    	/src/internal/capture/streamsink.go:332 +0x294
    

API changes in legacy driver

These changes need to be modified on the client side because not even the legacy driver is able to emulate them. Those are mostly some unexpeced order/timing of when the data are sent.

  • display name is updated on signal provide what is after the initial members list is sent (shown as Somebody in GUI).

TODOs:

  • Migrate demodesk/neko-client to vue3 Vue3 rewrite demodesk/neko-client#47.
  • Implement missing features from m1k1o/neko to demodesk/neko and demodesk/neko-client (vue3 branch).
  • Extend demodesk/neko to be fully backwards compatible with m1k1o/neko.
    • compatibility with legacy API:
      • ?pwd= - authentication.
        • accepts ?usr= as well, it creates new session each time. if no usr it tries with arbitrary username.
      • /ws - use original WebSocket messages?
      • /stats - use original JSON struct?
        {
            connections: 0,
            host: "",
            members: [{ session_id, displayname, admin, muted }],
            banned: { ip: session_id }
            locked: { resource: session_id },
            server_started_at: "",
            last_admin_left_at: "",
            last_user_left_at: "",
            control_protection: false,
            implicit_control: false,
        }
        
      • /screenshot.jpg - alias / redirect to /api/room/screen/shot.jpg?
      • /file - alias to /api/filetransfer?
      • /health - alias to /api/health?
      • ability to turn off/on legacy API using config.
    • compatibility with legacy configuration:
      • all legacy configuration options should be available
      • legacy pipeline builder video_bitrate, max_fps, audio_bitrate.
    • libclipboard is handled differently; should be an option to switch at build time. there is no UX impact.
    • upgrade docs
      • explain limitations of the legacy driver if its being used
      • list new config options
      • provide migration guide from old to new config options
      • list the new API
      • provide migration guide from old to new api

@m1k1o m1k1o self-assigned this Sep 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

2 participants