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); } } }
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); } }
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); } } }
/// <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); } } }
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); }
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); } }
/// <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(); }
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); } }
/// <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(); } }
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); }