コード例 #1
0
ファイル: Program.cs プロジェクト: trampster/Ropu
        static async Task Main(string[] args)
        {
            Console.WriteLine("Ropu Load Balancer");
            Console.WriteLine("Copyright (c) Daniel Hughes");
            Console.WriteLine();

            var settingsReader = new CommandLineSettingsReader();
            var settings       = settingsReader.ParseArgs(args);

            if (settings == null)
            {
                return;
            }

            var credentialsProvider = new CredentialsProvider()
            {
                Email    = settings.Email,
                Password = settings.Password
            };
            var webClient    = new RopuWebClient("https://192.168.1.9:5001/", credentialsProvider);
            var groupsClient = new GroupsClient(webClient, new ImageClient(webClient));


            var keysClient           = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption     = new PacketEncryption(keysClient);
            var loadBalancerProtocol = new LoadBalancerProtocol(new PortFinder(), 5069, packetEncryption, keysClient);

            var servicesClient = new ServicesClient(webClient, ServiceType.LoadBalancer);

            var controller = new LoadBalancerRunner(keysClient, loadBalancerProtocol, groupsClient, webClient, settings, servicesClient);
            await controller.Run();
        }
コード例 #2
0
ファイル: Client.cs プロジェクト: p3NTech/ShadeMsg
 public void Send(Packet packet)
 {
     if (tcpClient.Connected)
     {
         byte[] data = Encoding.UTF8.GetBytes(PacketEncryption.EncryptPacket(packet, password));
         networkStream.Write(data, 0, data.Length);
     }
 }
コード例 #3
0
ファイル: RopuProtocol.cs プロジェクト: trampster/Ropu
        public RopuProtocol(PortFinder portFinder, int startingPort, PacketEncryption packetEncryption)
        {
            _socket   = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            MediaPort = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort);
            Console.WriteLine($"Serving Node Protocol bound to port {MediaPort}");

            _socketEventArgsPool = new MemoryPool <SocketAsyncEventArgs>(() => CreateSocketAsyncEventArgs());

            _packetEncryption = packetEncryption;
        }
コード例 #4
0
        public void Run(string[] args)
        {
            var settingsReader = new CommandLineClientSettingsReader();

            if (!settingsReader.ParseArgs(args))
            {
                return;
            }

            var settings = settingsReader.ClientSettings;

            if (settings.Email == null)
            {
                Console.Error.WriteLine("No Email configured");
                return;
            }

            if (settings.Password == null)
            {
                Console.Error.WriteLine("No Password configured");
                return;
            }

            var credentials = new CredentialsProvider()
            {
                Email    = settings.Email,
                Password = settings.Password
            };

            var webClient = new RopuWebClient("asdf", credentials);


            var keysClient       = new KeysClient(webClient, false, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption = new PacketEncryption(keysClient);

            var protocolSwitch    = new ProtocolSwitch(_controlPortStarting, new PortFinder(), packetEncryption, keysClient, settings);
            var servingNodeClient = new ServingNodeClient(protocolSwitch);

            var callManagementProtocol = new LoadBalancerProtocol(new PortFinder(), 5079, packetEncryption, keysClient);

            _mediaClient = BuildMediaClient(protocolSwitch, settings);

            //IPEndPoint loadBalancerEndpoint = new IPEndPoint(settings.LoadBalancerIPAddress, LoadBalancerPort);
            var beepPlayer = BuildBeepPlayer(settings);



            _ropuClient = new RopuClient(protocolSwitch, servingNodeClient, _mediaClient, callManagementProtocol, settings, beepPlayer, webClient, keysClient);
            var ropuClientTask = _ropuClient.Run();

            //var consoleTask = TaskCordinator.RunLong(HandleCommands);

            //TaskCordinator.WaitAll(ropuClientTask, consoleTask).Wait();
            ropuClientTask.Wait();
        }
コード例 #5
0
 public LoadBalancerProtocol(
     IPortFinder portFinder,
     ushort startingPort,
     PacketEncryption packetEncryption,
     KeysClient keysClient)
 {
     _sendArgs         = CreateSocketAsyncEventArgs();
     _packetEncryption = packetEncryption;
     _keysClient       = keysClient;
     _socket           = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
     _port             = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort);
     Console.WriteLine($"Load BalancerProtocol bound to port {_port}");
 }
コード例 #6
0
ファイル: Server.cs プロジェクト: p3NTech/ShadeMsg
        private void BackgroundSender_DoWork(Packet packet, Client client)
        {
            if (client.socket.Connected)
            {
                Socket socket         = client.socket;
                string crypted_packet = PacketEncryption.EncryptPacket(packet, password);

                if (!string.IsNullOrEmpty(crypted_packet))
                {
                    byte[] data = Encoding.UTF8.GetBytes(PacketEncryption.EncryptPacket(packet, password));
                    socket.Send(data);
                }
            }
        }
コード例 #7
0
ファイル: Client.cs プロジェクト: p3NTech/ShadeMsg
 private void Background_receive_DoWork(object sender, DoWorkEventArgs e)
 {
     while (true)
     {
         if (tcpClient.Connected)
         {
             byte[] data   = new byte[1024];
             Stream stream = tcpClient.GetStream();
             int    k      = stream.Read(data, 0, data.Length);
             NewPacket(PacketEncryption.DecryptPacket(Encoding.UTF8.GetString(data).Trim('\0'), password));
         }
         Thread.Sleep(1000);
     }
 }
コード例 #8
0
        public ProtocolSwitch(
            ushort startingPort,
            IPortFinder portFinder,
            PacketEncryption packetEncryption,
            KeysClient keysClient,
            IClientSettings clientSettings)
        {
            _socket           = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            _packetEncryption = packetEncryption;
            _keysClient       = keysClient;
            _clientSettings   = clientSettings;
            LocalPort         = (ushort)portFinder.BindToAvailablePort(_socket, IPAddress.Any, startingPort);

            Console.WriteLine($"ProtocolSwitch bound to port {LocalPort}");
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: trampster/Ropu
        static async Task Main(string[] args)
        {
            Console.WriteLine("Ropu Serving Node");
            Console.WriteLine("Copyright (c) Daniel Hughes");
            Console.WriteLine();

            var settingsReader = new CommandLineSettingsReader();
            var settings       = settingsReader.ParseArgs(args);

            if (settings == null)
            {
                return;
            }

            var portFinder          = new PortFinder();
            var credentialsProvider = new CredentialsProvider()
            {
                Email    = settings.Email,
                Password = settings.Password
            };
            var webClient        = new RopuWebClient("https://192.168.1.9:5001", credentialsProvider);
            var keysClient       = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption = new PacketEncryption(keysClient);

            var mediaProtocol        = new RopuProtocol(portFinder, StartingServingNodePort, packetEncryption, keysClient);
            var loadBalancerProtocol = new LoadBalancerProtocol(portFinder, StartingLoadBalancerPort, packetEncryption, keysClient);
            var serviceDiscovery     = new ServiceDiscovery();

            var groupsClient = new GroupsClient(webClient, new ImageClient(webClient));
            var registra     = new Registra(groupsClient);
            var servingNodes = new ServingNodes(100);
            var groupCallControllerLookup = new GroupCallControllerLookup();

            var servicesClient = new ServicesClient(webClient, ServiceType.ServingNode);

            var servingNodeRunner = new ServingNodeRunner(
                mediaProtocol,
                loadBalancerProtocol,
                serviceDiscovery,
                registra,
                servingNodes,
                groupCallControllerLookup,
                servicesClient,
                keysClient);

            await servingNodeRunner.Run();
        }
コード例 #10
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Starting Ropu Call Controller");
            Console.WriteLine("Copyright (c) Daniel Hughes 2018");
            Console.WriteLine();

            var settingsReader = new CommandLineSettingsReader();
            var settings       = settingsReader.ParseArgs(args);

            if (settings == null)
            {
                return;
            }

            var credentialsProvider = new CredentialsProvider()
            {
                Email    = settings.Email,
                Password = settings.Password
            };
            var webClient = new RopuWebClient("https://192.168.1.9:5001", credentialsProvider);

            var portFinder           = new PortFinder();
            var keysClient           = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption     = new PacketEncryption(keysClient);
            var ropuProtocol         = new RopuProtocol(portFinder, 9000, packetEncryption);
            var loadBalancerProtocol = new LoadBalancerProtocol(portFinder, StartingControlPort, packetEncryption, keysClient);
            var serviceDiscovery     = new ServiceDiscovery();
            var servingNodes         = new ServingNodes(100);


            var servicesClient = new ServicesClient(webClient, ServiceType.CallController);

            var callControl = new CallControl(
                loadBalancerProtocol,
                serviceDiscovery,
                ropuProtocol,
                servingNodes,
                servicesClient,
                keysClient);

            await callControl.Run();
        }
コード例 #11
0
        private void BackgroundReceiver_DoWork(object sender, DoWorkEventArgs e)
        {
            while (!backgroundReceiver.CancellationPending)
            {
                byte[] data = new byte[1024];

                if (socket.Connected)
                {
                    try
                    {
                        socket.Receive(data);
                        string data_string = Encoding.UTF8.GetString(data).Trim('\0');
                        Packet packet      = PacketEncryption.DecryptPacket(data_string, password);
                        NewPacket(packet, this);
                    }
                    catch
                    {
                        Disconected(this);
                    }
                }
            }
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: trampster/Ropu
        static void Main(string[] args)
        {
            const ushort controlPortStarting = 5061;

            var settingsManager = new CommandLineClientSettingsReader();

            if (!settingsManager.ParseArgs(args))
            {
                return;
            }

            var settings = settingsManager.ClientSettings;

            var webClient = new RopuWebClient("https://192.168.1.9:5001/", settingsManager);

            var keysClient       = new KeysClient(webClient, false, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption = new PacketEncryption(keysClient);

            var protocolSwitch    = new ProtocolSwitch(controlPortStarting, new PortFinder(), packetEncryption, keysClient, settings);
            var servingNodeClient = new ServingNodeClient(protocolSwitch);

            IAudioSource audioSource =
                settings.FileMediaSource != null ?
                (IAudioSource) new FileAudioSource(settings.FileMediaSource) :
                (IAudioSource) new PulseAudioSimple(StreamDirection.Record, "RopuInput");

            var audioPlayer            = new PulseAudioSimple(StreamDirection.Playback, "RopuOutput");
            var audioCodec             = new OpusCodec();
            var jitterBuffer           = new AdaptiveJitterBuffer(2, 50);
            var mediaClient            = new MediaClient(protocolSwitch, audioSource, audioPlayer, audioCodec, jitterBuffer, settings);
            var callManagementProtocol = new LoadBalancerProtocol(new PortFinder(), 5079, packetEncryption, keysClient);

            var beepPlayer = new BeepPlayer(new PulseAudioSimple(StreamDirection.Playback, "RopuBeeps"));


            var ropuClient = new RopuClient(protocolSwitch, servingNodeClient, mediaClient, callManagementProtocol, settings, beepPlayer, webClient, keysClient);

            var application = new RopuApplication(ropuClient);

            var imageService = new ImageService();

            //TODO: get web address from config
            var imageClient  = new ImageClient(webClient);
            var groupsClient = new GroupsClient(webClient, imageClient);
            var usersClient  = new UsersClient(webClient);
            //settings.UserId = usersClient.GetCurrentUser().Result.Id;
            var pttPage = new PttPage(imageService);

            var navigator = new Navigator();

            var colorService = new ColorService();

            navigator.Register <LoginViewModel, LoginView>(() => new LoginView(new LoginViewModel(navigator, webClient, settingsManager), imageService));

            navigator.Register <SignupViewModel, SignupPage>(() => new SignupPage(new SignupViewModel(navigator, usersClient), imageService));

            Action <Func <Task> > invoke = toDo => Application.Instance.Invoke(toDo);

            var permissionServices = new PermissionServices();

            var pttView = new PttView(new PttViewModel <Color>(ropuClient, settingsManager, groupsClient, usersClient, imageClient, colorService, invoke, permissionServices, webClient, navigator), pttPage);

            navigator.Register <PttViewModel <Color>, PttView>(() => pttView);
            navigator.RegisterView("HomeRightPanel", "PttView", () => pttView);


            var homeView = new HomeView(new HomeViewModel(navigator), navigator, colorService);

            navigator.Register <HomeViewModel, HomeView>(() => homeView);

            var browseGroupsView = new BrowseGroupsView(new BrowseGroupsViewModel(groupsClient, navigator));

            navigator.Register <BrowseGroupsViewModel, BrowseGroupsView>(() => browseGroupsView);

            Func <Group, BrowseGroupView> browseGroupViewBuilder = group => new BrowseGroupView(new BrowseGroupViewModel(group, groupsClient, settings, navigator), imageService, navigator, colorService);

            navigator.Register <BrowseGroupViewModel, BrowseGroupView, Group>(group => browseGroupViewBuilder(group));

            var selectIdleGroupView = new SelectIdleGroupView(new SelectGroupViewModel(groupsClient, navigator, ropuClient));

            navigator.RegisterView("HomeRightPanel", "SelectIdleGroupView", () => selectIdleGroupView);

            var mainForm = new MainView(navigator, new MainViewModel(settings, navigator));

            mainForm.Icon = imageService.Ropu;

            var ignore = navigator.ShowModal <HomeViewModel>();

            ignore = navigator.ShowPttView();
            application.Run(mainForm);
        }