Description:
The task is to create a platform simulator with video content. The basic entities will be video,
stream, user, channel.
Each video should have a thumbnail, name, description, duration, upload date, number of
views, number of likes, premium version (not available for free).
Streams will have a thumbnail, name, description, start time, amount of likes, and amount of
users currently watching a given stream.
The user account (object) will have thumbnail, name, date of joining, list of following channels, information whether the account is premium, information about the currently viewed
video/stream and information about movies in the queue.
The channel should be an extension of an account and additionally have a list of accounts following it and a list of uploaded videos. All videos and streams are available for viewing by both
users and channels. The exception here are premium videos - only premium users can watch them.
The video is uploaded to the system by channels (automatically during simulation).
The newly launched simulation will initially create a set of users, channels and a database of videos and scheduled steams. Users are also asked to randomly subscribe to several channels. During
the simulation, channels are publishing new videos and users are watching videos and streams.
Requirements- each channel and user is a separate thread
- an appropriate user interface should be prepared, enabling the preview of the simulation progress, viewing all objects in the system. It should also handle actions regarding to the simulation
creation, stop, save, load of saved state
- created videos, streams, users, channels should have automatically filled field values
- the video or stream should be played in real time. In the case of a stream, the channel decides
when to finish the stream
- the user interface should be able to search for entities by name
- user thread selects next videos to watch (randomly)
- the channel publishes new content at random moments
- the user can view detailed information about the object in a separate window
- use a semaphore or monitor to solve multithreading problems
- saving and reading the simulation state should be solved using serialization
- the basic evaluation criteria are code quality and functionality consistent with the requirements; the aesthetic values of the visualization work to the advantage of the user,