Example #1
0
        public void Run(IScsServerClient client,
                        List <string> parameters,
                        string messageId)
        {
            if (!Utils.Instance.IsActiveLogin(client))
            {
                return;
            }

            string text   = parameters[0];
            string roomId = parameters[1];

            if (!string.IsNullOrWhiteSpace(text))
            {
                var room = DataSingleton.Instance.Rooms.GetAllItems()
                           .First(x => x.Id == Convert.ToInt32(roomId));

                foreach (var clientInstance in room.InsideInfo.Clients)
                {
                    var clientServerInstance = DataSingleton.Instance.ServerClients.GetAllItems()
                                               .First(x => x.Id == clientInstance.Id);
                    var sender = new ServerSender(clientServerInstance.Client);

                    sender.SendMessage(text, roomId,
                                       (int)DataSingleton.Instance.ServerClients[client.ClientId].Id);
                }
            }
        }
Example #2
0
        public void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);

            try
            {
                var login  = DataSingleton.Instance.ServerClients[(int)client.ClientId].Login;
                var userId = SqlUserCommands.GetUserId(login);

                var tmp = DataSingleton.Instance.Rooms.GetAllItems()
                          .Where(x => x.InsideInfo.Clients.Exists(y => y.Id == userId)).ToList();
                if (tmp.Any())
                {
                    foreach (var roomActive in tmp)
                    {
                        var index = roomActive.InsideInfo.Clients.FindIndex(x => x.Id == userId);
                        roomActive.InsideInfo.Clients?.RemoveAt(index);
                    }
                }

                DataSingleton.Instance.ServerClients.Remove(client.ClientId);
                SqlUserCommands.AddActionInfo(userId, Utils.Instance.GetIpOfClient(client),
                                              SqlUserCommands.Actions.Logout);
                sender.Success(messageId);
                Console.WriteLine("{0} disconnected", client.ClientId);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                sender.Error(messageId);
            }
        }
Example #3
0
        private void TrackRefresh()
        {
            foreach (var room in DataSingleton.Instance.Rooms.GetAllItems())
            {
                if (room.InsideInfo.Djs.Count == 0)
                {
                    continue;
                }
                room.InsideInfo.TimeLeft--;

                if (room.InsideInfo.TimeLeft <= 0)
                {
                    room.InsideInfo.NextDj();
                    foreach (var user in room.InsideInfo.Clients)
                    {
                        var client = new ServerSender(DataSingleton.Instance.ServerClients.GetAllItems()
                                                      .First(x => x.Id.Equals(user.Id)).Client);

                        client.ChangeTrack(room.InsideInfo.Djs[0], room.Id.ToString());
                    }

                    Console.WriteLine(room.InsideInfo.Djs[0].Track[0].Id + " new " + room.InsideInfo.TimeLeft);
                }
            }
        }
Example #4
0
 /// <summary>
 /// Creates a new <see cref="Server{T}"/> using <see cref="Server.ServerConfiguration"/>.
 /// </summary>
 /// <param name="configuration">The <see cref="Server.ServerConfiguration"/>.</param>
 public Server(ServerConfiguration configuration)
 {
     this.ServerConfiguration = configuration ?? throw new ArgumentNullException("Configuration can't be null.");
     this.clients             = new ConcurrentDictionary <Guid, T>();
     this.acceptor            = new ServerAcceptor <T>(this);
     this.receiver            = new ServerReceiver(this);
     this.sender        = new ServerSender();
     this.bufferManager = new BufferManager(configuration.MaximumNumberOfConnections, configuration.ClientBufferSize);
 }
        public async void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);
            var dj     = JsonConvert.DeserializeObject <Dj>(parameters[0]);

            if (!Utils.Instance.IsActiveLogin(client) || dj.Track.Count <= 0)
            {
                sender.Error(messageId);
            }

            foreach (var track in dj.Track)
            {
                if (!YoutubeClient.ValidateVideoId(track.Id))
                {
                    sender.Error(messageId);
                    return;
                }
            }

            var userClient = DataSingleton.Instance.ServerClients[(int)client.ClientId].ToUserClient();

            //TODO to change if want to have multichannel watchning feature
            var room = DataSingleton.Instance.Rooms.GetAllItems()
                       .FirstOrDefault(x => x.InsideInfo.Clients.Exists(
                                           y => y.Id == userClient.Id));

            if (room == null)
            {
                sender.Error(messageId);
                return;
            }

            var yt = new YoutubeClient();

            foreach (var track in dj.Track)
            {
                var query = await yt.GetVideoAsync(track.Id);

                track.Time = Convert.ToInt32(query.Duration.TotalSeconds);
            }

            room.InsideInfo.Djs.Add(dj);
            sender.Success(messageId);

            if (room.InsideInfo?.Clients != null)
            {
                foreach (var roomUser in room.InsideInfo?.Clients)
                {
                    var roomClient = DataSingleton.Instance.ServerClients.GetAllItems()
                                     .FirstOrDefault(x => x.Id == roomUser.Id)
                                     ?.Client;

                    sender = new ServerSender(roomClient);
                    sender.NewDjInQueue(dj);
                }
            }
        }
Example #6
0
        public void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);

            if (!Utils.Instance.IsActiveLogin(client))
            {
                return;
            }
            sender.GetRooms(DataSingleton.Instance.Rooms.GetAllItems(), messageId);
        }
Example #7
0
        public void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);

            var login    = parameters[0];
            var password = parameters[1];

            try
            {
                if (SqlUserCommands.LoginExists(login))
                {
                    var hashedPass = Scrypt.Hash(password, SqlUserCommands.GetSalt(login));

                    if (SqlUserCommands.CheckPassword(hashedPass, login))
                    {
                        var getUserID = SqlUserCommands.GetUserId(login);
                        var rank      = SqlUserCommands.GetUserRank(getUserID);

                        var tmpClient = new ServerClient(client)
                        {
                            Rank     = (Rank)rank,
                            Id       = getUserID,
                            Username = login,
                            Login    = login
                        };

                        // if (Utils.Instance.IsActiveLogin(client))
                        //Receiver_Disconnect(null, new ServerReceiverEvents.DisconnectEventArgs(e.Client)); ///TODO

                        DataSingleton.Instance.ServerClients[(int)tmpClient.Client.ClientId] = tmpClient;
                        sender.Success(messageId, tmpClient.Username);
                        SqlUserCommands.AddActionInfo(getUserID, Utils.Instance.GetIpOfClient(client),
                                                      SqlUserCommands.Actions.Login);
                    }
                    else
                    {
                        sender.Error(messageId);
                    }
                }
                else
                {
                    sender.Error(messageId);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                sender.Error(messageId);
            }
        }
Example #8
0
        /// <summary>
        /// constructor
        /// </summary>
        ClientGateway()
        {
            throw new NotImplementedException();

            //init listener
            _webserviceListener = new ClientListener();
            _webserviceListener.initialize(8999);
            ClientDefinition.ErrorMessageEvent      += ClientDefinition_ErrorMessageEvent;
            ClientDefinition.OnConfigRequestEvent   += ClientDefinition_OnConfigRequestEvent;
            ClientDefinition.OnPingEvent            += ClientDefinition_OnPingEvent;
            ClientDefinition.OnScanRequestEvent     += ClientDefinition_OnScanRequestEvent;
            ClientDefinition.OnShutdownRequestEvent += ClientDefinition_OnShutdownRequestEvent;

            //init sender
            _webserviceSender = new ServerSender();
        }
Example #9
0
        public void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);

            var login    = parameters[0];
            var password = parameters[1];
            var email    = parameters[2];

            try
            {
                if (!SqlUserCommands.LoginExists(login))
                {
                    var salt = Scrypt.GenerateSalt();

                    if (SqlUserCommands.CreateUser(login, Scrypt.Hash(password, salt), salt, login))
                    {
                        sender.Success(messageId);
                        var getUserID = SqlUserCommands.GetUserId(login);

                        SqlUserCommands.AddActionInfo(getUserID, Utils.Instance.GetIpOfClient(client),
                                                      SqlUserCommands.Actions.Register);
                    }
                    else
                    {
                        sender.Error(messageId);
                    }
                }
                else
                {
                    sender.Error(messageId); //TODO acc exist param
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                sender.Error(messageId);
            }
        }
Example #10
0
        /// <summary>
        /// Will handle received data and send out data on clientside and serverside if server is running
        /// </summary>
        void Update()
        {
            ThreadManager.UpdateMain();
            if (Client.Client.connected && Client.Client.myId != 0)
            {
                // Client is connected to a server
                if (player == null)
                {
                    player = new PlayerData(Client.Client.myId);
                }
                if (Player.local != null && Player.local.body != null)
                {
                    player.leftHand.position  = Player.local.body.handLeft.transform.position;
                    player.rightHand.position = Player.local.body.handRight.transform.position;
                    player.head.position      = Player.local.head.transform.position;
                    player.head.rotation      = Player.local.head.transform.rotation;
                    ClientSender.sendPlayerData(player);
                }


                if (serverRunning)
                {
                    int i = 0;
                    foreach (Item item in Item.list)
                    {
                        if (item.data.category != BS.ItemData.Category.Prop)
                        {
                            i++;
                            if (!Client.Client.networkedItems.ContainsValue(item) && item.data.category != BS.ItemData.Category.Body && !item.data.id.Contains("Multiplayer") && item.data.prefab != null)
                            {
                                if (!Server.Server.items.ContainsKey(Client.Client.myId))
                                {
                                    Server.Server.items[Client.Client.myId] = new Dictionary <int, ItemData>();
                                }

                                if (Client.Client.sendingItems.ContainsKey(item))
                                {
                                    Client.Client.sendingItems[item].objectData.position        = item.transform.position;
                                    Client.Client.sendingItems[item].objectData.rotation        = item.transform.rotation;
                                    Client.Client.sendingItems[item].objectData.velocity        = item.rb.velocity;
                                    Client.Client.sendingItems[item].objectData.angularVelocity = item.rb.angularVelocity;
                                    Server.Server.items[Client.Client.myId][i] = Client.Client.sendingItems[item];
                                }
                                else
                                {
                                    Server.Server.networkIds++;
                                    Client.Client.sendingItems[item] = new ItemData(Server.Server.networkIds, item.data.id)
                                    {
                                        playerControl = Client.Client.myId
                                    };
                                    Server.Server.items[Client.Client.myId][i] = Client.Client.sendingItems[item];
                                }
                            }
                        }
                        else
                        {
                            item.Despawn();
                        }
                    }
                }
                else
                {
                    int i = 0;
                    foreach (Item item in Item.list)
                    {
                        if (item.data.category != BS.ItemData.Category.Prop)
                        {
                            i++;
                            if (!Client.Client.networkedItems.ContainsValue(item) && item.data.category != BS.ItemData.Category.Body && !item.data.id.Contains("Multiplayer") && item.data.prefab != null)
                            {
                                if (Client.Client.sendingItems.ContainsKey(item))
                                {
                                    Client.Client.sendingItems[item].objectData.position        = item.transform.position;
                                    Client.Client.sendingItems[item].objectData.rotation        = item.transform.rotation;
                                    Client.Client.sendingItems[item].objectData.velocity        = item.rb.velocity;
                                    Client.Client.sendingItems[item].objectData.angularVelocity = item.rb.angularVelocity;

                                    ClientSender.sendItemData(Client.Client.sendingItems[item]);
                                }
                                else
                                {
                                    Client.Client.sendingItems[item] = new ItemData(0, item.data.id)
                                    {
                                        playerControl = Client.Client.myId, clientsideId = i
                                    };
                                    ClientSender.sendItemData(Client.Client.sendingItems[item]);
                                }
                            }
                        }
                        else
                        {
                            item.Despawn();
                        }
                    }
                }

                foreach (ItemData item in Client.Client.items.Values)
                {
                    if (DateTime.Now > item.toDelete)
                    {
                        ThreadManager.ExecuteOnMainThread(() =>
                        {
                            Client.Client.items.Remove(item.networkId);
                            Client.Client.networkedItems.Remove(item.networkId);
                        });
                        item.clientsideItem.Despawn();
                    }
                }
            }
            if (serverRunning)
            {
                ServerSender.SendPlayerData();
                ServerSender.SendItemData();
            }
        }
Example #11
0
        public void Run(IScsServerClient client, List <string> parameters, string messageId)
        {
            var sender = new ServerSender(client);
            var roomId = parameters[0];

            if (!Utils.Instance.IsActiveLogin(client))
            {
                return;
            }
            //select client class object wchich refer to user
            var userclient = DataSingleton.Instance.ServerClients[(int)client.ClientId].ToUserClient();
            //select room to join
            var room = DataSingleton.Instance.Rooms.GetAllItems().
                       FirstOrDefault(x => x.Id == Convert.ToInt32(roomId));
            //Set user to max 1 room, remove from other instances
            var getRoomsWithSpecificUser = DataSingleton.Instance.Rooms.GetAllItems()
                                           .Where(x => x.InsideInfo.Clients.Exists(y => y.Id == userclient.Id));

            foreach (var roomActive in getRoomsWithSpecificUser)
            {
                var index = roomActive.InsideInfo.Clients.FindIndex(x => x.Id == userclient.Id);

                foreach (var clientInstance in roomActive.InsideInfo.Clients)
                {
                    if (clientInstance.Id == userclient.Id)
                    {
                        continue;
                    }

                    var clientServerInstance = DataSingleton.Instance.ServerClients.GetAllItems()
                                               .First(x => x.Id == clientInstance.Id);
                    var clientServerSender = new ServerSender(clientServerInstance.Client);

                    clientServerSender.RemoveUserFromRoom(userclient, roomActive.Id.ToString());
                }

                roomActive.InsideInfo.Clients.RemoveAt(index);
            }

            //add client to room
            room?.InsideInfo.Clients.Add(userclient);

            if (room?.InsideInfo.Clients != null)
            {
                foreach (var clientInstance in room.InsideInfo.Clients)
                {
                    if (clientInstance.Id == userclient.Id)
                    {
                        continue;
                    }

                    var clientServerInstance = DataSingleton.Instance.ServerClients.GetAllItems()
                                               .First(x => x.Id == clientInstance.Id);
                    var clientServerSender = new ServerSender(clientServerInstance.Client);

                    clientServerSender.AddUserToRoom(userclient, roomId);
                }
            }

            sender.JoinRoom(room?.InsideInfo, messageId);
        }