Пример #1
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.RemoteInfo == null)
            {
                throw new ArgumentNullException("Info");
            }

            if (content.PeerPoint == null)
            {
                throw new ArgumentNullException("PeerPoint");
            }

            if (string.IsNullOrEmpty(content.ReceiverNick))
            {
                throw new ArgumentException("receiverNick");
            }

            if (!ServerModel.Server.ContainsConnection(content.ReceiverNick))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.P2PUserNotExist);
                return;
            }

            var connectContent = new ClientConnectToPeerCommand.MessageContent
            {
                PeerPoint  = content.PeerPoint,
                RemoteInfo = content.RemoteInfo,
            };

            ServerModel.Server.SendMessage(content.ReceiverNick, ClientConnectToPeerCommand.CommandId, connectContent);
        }
Пример #2
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied);
                    return;
                }

                var roomRefreshedContent = new ClientRoomRefreshedCommand.MessageContent
                {
                    Room  = room,
                    Users = ServerModel.Api.GetRoomUsers(server, room)
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomRefreshedCommand.CommandId, roomRefreshedContent);
            }
        }
Пример #3
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentNullException("RoomName");
            }

            using (var server = ServerModel.Get())
            {
                if (server.Rooms.ContainsKey(content.RoomName))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAlreadyExist);
                    return;
                }

                var creatingRoom = content.Type == RoomType.Chat
          ? new Room(args.ConnectionId, content.RoomName)
          : new VoiceRoom(args.ConnectionId, content.RoomName);

                server.Rooms.Add(content.RoomName, creatingRoom);

                var sendingContent = new ClientRoomOpenedCommand.MessageContent
                {
                    Room  = creatingRoom,
                    Type  = content.Type,
                    Users = ServerModel.Api.GetRoomUsers(server, creatingRoom)
                };

                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomOpenedCommand.CommandId, sendingContent);
            }
        }
Пример #4
0
        private void OnPackageReceived(object sender, PackageReceivedEventArgs e)
        {
            try
            {
                if (e.Exception != null)
                {
                    ServerModel.Logger.Write(e.Exception);
                    return;
                }

                if (!isServerRunning)
                {
                    return;
                }

                var connectionId = ((ServerConnection)sender).Id;
                var command      = ServerModel.Api.GetCommand(e.Package.Id);
                var args         = new ServerCommandArgs(connectionId, e.Package);

                requestQueue.Add(connectionId, command, args);
            }
            catch (Exception exc)
            {
                ServerModel.Logger.Write(exc);
            }
        }
Пример #5
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentNullException("RoomName");
            }

            using (var server = ServerModel.Get())
            {
                if (server.Rooms.ContainsKey(content.RoomName))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Комната с таким именем уже создана, выберите другое имя.");
                    return;
                }

                var creatingRoom = content.Type == RoomType.Chat
          ? new Room(args.ConnectionId, content.RoomName)
          : new VoiceRoom(args.ConnectionId, content.RoomName);

                server.Rooms.Add(content.RoomName, creatingRoom);

                var sendingContent = new ClientRoomOpenedCommand.MessageContent
                {
                    Room  = creatingRoom,
                    Type  = content.Type,
                    Users = creatingRoom.Users.Select(nick => server.Users[nick]).ToList()
                };

                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomOpenedCommand.CommandId, sendingContent);
            }
        }
Пример #6
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                var roomRefreshedContent = new ClientRoomRefreshedCommand.MessageContent
                {
                    Room  = room,
                    Users = room.Users.Select(nick => server.Users[nick]).ToList()
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomRefreshedCommand.CommandId, roomRefreshedContent);
            }
        }
Пример #7
0
        private void DataReceivedCallback(object sender, DataReceivedEventArgs e)
        {
            try
            {
                if (e.Error != null)
                {
                    throw e.Error;
                }

                if (!isServerRunning)
                {
                    return;
                }

                var connectionId = ((ServerConnection)sender).Id;
                var command      = ServerModel.API.GetCommand(e.ReceivedData);
                var args         = new ServerCommandArgs
                {
                    Message      = e.ReceivedData,
                    ConnectionId = connectionId,
                };

                requestQueue.Add(connectionId, command, args);
            }
            catch (Exception exc)
            {
                ServerModel.Logger.Write(exc);
            }
        }
Пример #8
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.File == null)
            {
                throw new ArgumentNullException("File");
            }

            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Files.Exists(file => file.Equals(content.File)))
                {
                    return;
                }

                if (!room.ContainsUser(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                bool access = false;
                if (room.Admin != null)
                {
                    access |= args.ConnectionId.Equals(room.Admin);
                }
                access |= args.ConnectionId.Equals(content.File.Owner.Nick);
                if (!access)
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.FileRemoveAccessDenied);
                    return;
                }

                room.Files.Remove(content.File);
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.FileRemoved, content.File.Name);

                var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent()
                {
                    File     = content.File,
                    RoomName = room.Name,
                };

                foreach (string user in room.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent);
                }
            }
        }
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.File == null)
            {
                throw new ArgumentNullException("File");
            }

            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Files.Exists(file => file.Equals(content.File)))
                {
                    return;
                }

                if (!room.ContainsUser(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не входите в состав этой комнаты.");
                    return;
                }

                bool access = false;
                if (room.Admin != null)
                {
                    access |= args.ConnectionId.Equals(room.Admin);
                }
                access |= args.ConnectionId.Equals(content.File.Owner.Nick);
                if (!access)
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не можете удалить данный файл. Не хватает прав.");
                    return;
                }

                room.Files.Remove(content.File);
                ServerModel.Api.SendSystemMessage(args.ConnectionId, string.Format("Файл \"{0}\" удален с раздачи.", content.File.Name));

                var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent()
                {
                    File     = content.File,
                    RoomName = room.Name,
                };

                foreach (string user in room.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent);
                }
            }
        }
Пример #10
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.User == null)
            {
                throw new ArgumentNullException("User");
            }

            if (content.User.Nick == null)
            {
                throw new ArgumentNullException("User.Nick");
            }

            if (content.User.Nick.Contains(Connection.TempConnectionPrefix))
            {
                SendFail(args.ConnectionId, "Соединение не может быть зарегистрировано с таким ником. Выберите другой.");
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room      = server.Rooms[ServerModel.MainRoomName];
                var userExist = room.Users.Any(nick => string.Equals(content.User.Nick, nick));

                if (userExist)
                {
                    SendFail(args.ConnectionId, "Соединение не может быть зарегистрировано с таким ником. Он занят.");
                    return;
                }
                else
                {
                    ServerModel.Logger.WriteInfo("User login: {0}", content.User.Nick);

                    server.Users.Add(content.User.Nick, content.User);
                    room.AddUser(content.User.Nick);

                    var regResponseContent = new ClientRegistrationResponseCommand.MessageContent {
                        Registered = true
                    };

                    ServerModel.Server.RegisterConnection(args.ConnectionId, content.User.Nick);
                    ServerModel.Server.SendMessage(content.User.Nick, ClientRegistrationResponseCommand.CommandId, regResponseContent);

                    var sendingContent = new ClientRoomRefreshedCommand.MessageContent
                    {
                        Room  = room,
                        Users = room.Users.Select(nick => server.Users[nick]).ToList()
                    };

                    foreach (var connectionId in room.Users)
                    {
                        ServerModel.Server.SendMessage(connectionId, ClientRoomRefreshedCommand.CommandId, sendingContent);
                    }

                    ServerModel.Notifier.Registered(new ServerRegistrationEventArgs {
                        Nick = content.User.Nick
                    });
                }
            }
        }
Пример #11
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, "Невозможно удалить пользователей из основной комнаты.");
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена.");
                    return;
                }

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };

                foreach (var user in content.Users)
                {
                    if (!room.ContainsUser(user.Nick))
                    {
                        continue;
                    }

                    if (user.Equals(room.Admin))
                    {
                        ServerModel.Api.SendSystemMessage(args.ConnectionId, "Невозможно удалить из комнаты администратора.");
                        continue;
                    }

                    room.RemoveUser(user.Nick);

                    ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.CommandId, sendingContent);
                }

                RefreshRoom(server, room);
            }
        }
Пример #12
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.Message))
            {
                throw new ArgumentException("Message");
            }

            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                if (content.MessageId != null && !room.IsMessageBelongToUser(args.ConnectionId, content.MessageId.Value))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.MessageEditAccessDenied);
                    return;
                }

                Message message = null;
                if (content.MessageId == null)
                {
                    message = room.AddMessage(args.ConnectionId, content.Message);
                }
                else
                {
                    message      = room.GetMessage(content.MessageId.Value);
                    message.Text = content.Message;
                }

                var sendingContent = new ClientOutRoomMessageCommand.MessageContent
                {
                    Message   = message.Text,
                    RoomName  = content.RoomName,
                    Sender    = args.ConnectionId,
                    MessageId = message.Id
                };

                foreach (string user in room.Users.Where(u => u != null))
                {
                    ServerModel.Server.SendMessage(user, ClientOutRoomMessageCommand.CommandId, sendingContent);
                }
            }
        }
Пример #13
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };

                foreach (var user in content.Users)
                {
                    if (!room.ContainsUser(user.Nick))
                    {
                        continue;
                    }

                    if (user.Equals(room.Admin))
                    {
                        ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                        continue;
                    }

                    room.RemoveUser(user.Nick);

                    ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.CommandId, sendingContent);
                }

                RefreshRoom(server, room);
            }
        }
Пример #14
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.Nick == null)
            {
                throw new ArgumentNullException("Info");
            }

            if (!ServerModel.Server.ContainsConnection(content.Nick))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.P2PUserNotExist);
                return;
            }

            ServerModel.Server.P2PService.Introduce(args.ConnectionId, content.Nick);
        }
Пример #15
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.Nick == null)
            {
                throw new ArgumentNullException("Info");
            }

            if (!ServerModel.Server.ContainsConnection(content.Nick))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, "Данного пользователя не существует.");
                return;
            }

            ServerModel.Server.P2PService.Introduce(args.ConnectionId, content.Nick);
        }
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                var file = room.Files.Find(f => f.Id == content.FileId);
                if (file == null)
                {
                    return;
                }

                if (!room.ContainsUser(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied);
                    return;
                }

                if (room.Admin != args.ConnectionId && file.Id.Owner != args.ConnectionId)
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.FileRemoveAccessDenied);
                    return;
                }

                room.Files.Remove(file);
                ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.FileRemoved, file.Name);

                var postedFileDeletedContent = new ClientPostedFileDeletedCommand.MessageContent
                {
                    RoomName = room.Name,
                    FileId   = file.Id
                };

                foreach (string user in room.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientPostedFileDeletedCommand.CommandId, postedFileDeletedContent);
                }
            }
        }
Пример #17
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, "Невозможно выйти из основной комнаты.");
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы и так не входите в состав этой комнаты.");
                    return;
                }

                room.RemoveUser(args.ConnectionId);
                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent);

                if (string.Equals(room.Admin, args.ConnectionId))
                {
                    room.Admin = room.Users.FirstOrDefault();

                    if (room.Admin != null)
                    {
                        var message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name);
                        ServerModel.Api.SendSystemMessage(room.Admin, message);
                    }
                }

                RefreshRoom(server, room);
            }
        }
Пример #18
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.User == null)
            {
                throw new ArgumentNullException("User");
            }

            if (content.User.Nick == null)
            {
                throw new ArgumentNullException("User.Nick");
            }

            if (content.User.Nick.Contains(Connection.TempConnectionPrefix))
            {
                SendFail(args.ConnectionId, SystemMessageId.NotRegisteredBadName);
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room      = server.Rooms[ServerModel.MainRoomName];
                var userExist = room.Users.Any(nick => string.Equals(content.User.Nick, nick));

                if (userExist)
                {
                    SendFail(args.ConnectionId, SystemMessageId.NotRegisteredNameAlreadyExist);
                    return;
                }
                else
                {
                    ServerModel.Logger.WriteInfo("User login: {0}", content.User.Nick);

                    server.Users.Add(content.User.Nick, content.User);
                    room.AddUser(content.User.Nick);

                    Register(content.User.Nick, args.ConnectionId);

                    var users = ServerModel.Api.GetRoomUsers(server, room);
                    SendRefresh(content.User.Nick, room, users);
                    SendOpened(content.User.Nick, room, users);

                    // Notify
                    ServerModel.Notifier.Registered(new ServerRegistrationEventArgs {
                        Nick = content.User.Nick
                    });
                }
            }
        }
Пример #19
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomCantLeaveMainRoom);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                room.RemoveUser(args.ConnectionId);
                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent);

                if (string.Equals(room.Admin, args.ConnectionId))
                {
                    room.Admin = room.Users.FirstOrDefault();
                    if (room.Admin != null)
                    {
                        ServerModel.Api.SendSystemMessage(room.Admin, MessageId.RoomAdminChanged, room.Name);
                    }
                }

                RefreshRoom(server, room);
            }
        }
Пример #20
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (content.File == null)
            {
                throw new ArgumentNullException("File");
            }

            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var context = ServerModel.Get())
            {
                var room = context.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                if (room.Files.FirstOrDefault(file => file.Equals(content.File)) == null)
                {
                    room.Files.Add(content.File);
                }

                var sendingContent = new ClientFilePostedCommand.MessageContent
                {
                    File     = content.File,
                    RoomName = content.RoomName
                };

                foreach (string user in room.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientFilePostedCommand.CommandId, sendingContent);
                }
            }
        }
Пример #21
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.IsNullOrEmpty(content.NewAdmin))
            {
                throw new ArgumentNullException("NewAdmin");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied);
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied);
                    return;
                }

                if (!room.Users.Contains(content.NewAdmin))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomUserNotExist);
                    return;
                }

                room.Admin = content.NewAdmin;
                ServerModel.Api.SendSystemMessage(content.NewAdmin, SystemMessageId.RoomAdminChanged, room.Name);
            }
        }
Пример #22
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.NewAdmin == null)
            {
                throw new ArgumentNullException("NewAdmin");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, "Невозможно назначить администратора для главной комнаты.");
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена.");
                    return;
                }

                room.Admin = content.NewAdmin.Nick;

                var message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name);
                ServerModel.Api.SendSystemMessage(content.NewAdmin.Nick, message);
            }
        }
Пример #23
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не можете удалить основную комнату.");
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var context = ServerModel.Get())
            {
                var deletingRoom = context.Rooms[content.RoomName];
                if (!deletingRoom.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена.");
                    return;
                }

                context.Rooms.Remove(deletingRoom.Name);

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = deletingRoom
                };
                foreach (string user in deletingRoom.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent);
                }
            }
        }
Пример #24
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var context = ServerModel.Get())
            {
                var deletingRoom = context.Rooms[content.RoomName];
                if (!deletingRoom.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                context.Rooms.Remove(deletingRoom.Name);

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = deletingRoom
                };
                foreach (string user in deletingRoom.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent);
                }
            }
        }
Пример #25
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.NewAdmin == null)
            {
                throw new ArgumentNullException("NewAdmin");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                room.Admin = content.NewAdmin.Nick;
                ServerModel.Api.SendSystemMessage(content.NewAdmin.Nick, MessageId.RoomAdminChanged, room.Name);
            }
        }
Пример #26
0
 protected override void OnRun(ServerCommandArgs args)
 {
 }
Пример #27
0
 protected override void OnRun(ServerCommandArgs args)
 {
   ServerModel.Api.RemoveUser(args.ConnectionId);
 }
Пример #28
0
        private void DataReceivedCallback(object sender, DataReceivedEventArgs e)
        {
            try
              {
            if (e.Error != null)
              throw e.Error;

            if (!isServerRunning)
              return;

            var connectionId = ((ServerConnection)sender).Id;
            var command = ServerModel.API.GetCommand(e.ReceivedData);
            var args = new ServerCommandArgs
            {
              Message = e.ReceivedData,
              ConnectionId = connectionId,
            };

            requestQueue.Add(connectionId, command, args);
              }
              catch (Exception exc)
              {
            ServerModel.Logger.Write(exc);
              }
        }
Пример #29
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomItsMainRoom);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                var invitedUsers = new HashSet <string>();
                foreach (var user in content.Users)
                {
                    if (room.ContainsUser(user.Nick))
                    {
                        continue;
                    }

                    room.AddUser(user.Nick);
                    invitedUsers.Add(user.Nick);
                }

                var users = room.Users
                            .Select(nick => server.Users[nick])
                            .ToList();

                var roomOpenContent = new ClientRoomOpenedCommand.MessageContent
                {
                    Room  = room,
                    Type  = room is VoiceRoom ? RoomType.Voice : RoomType.Chat,
                    Users = users
                };

                var roomRefreshContent = new ClientRoomRefreshedCommand.MessageContent
                {
                    Room  = room,
                    Users = users
                };

                foreach (var userId in room.Users)
                {
                    if (invitedUsers.Contains(userId))
                    {
                        ServerModel.Server.SendMessage(userId, ClientRoomOpenedCommand.CommandId, roomOpenContent);
                    }
                    else
                    {
                        ServerModel.Server.SendMessage(userId, ClientRoomRefreshedCommand.CommandId, roomRefreshContent);
                    }
                }
            }
        }
Пример #30
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomItsMainRoom);
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, SystemMessageId.RoomAccessDenied);
                    return;
                }

                var invitedUsers = new HashSet <string>();
                foreach (var userNick in content.Users)
                {
                    if (room.ContainsUser(userNick))
                    {
                        continue;
                    }

                    room.AddUser(userNick);
                    invitedUsers.Add(userNick);
                }

                var users = ServerModel.Api.GetRoomUsers(server, room);

                var roomOpenContent = new ClientRoomOpenedCommand.MessageContent
                {
                    Room  = room,
                    Type  = room.Type,
                    Users = users
                };

                var roomRefreshContent = new ClientRoomRefreshedCommand.MessageContent
                {
                    Room  = room,
                    Users = users
                };

                foreach (var userId in room.Users)
                {
                    if (invitedUsers.Contains(userId))
                    {
                        ServerModel.Server.SendMessage(userId, ClientRoomOpenedCommand.CommandId, roomOpenContent);
                    }
                    else
                    {
                        ServerModel.Server.SendMessage(userId, ClientRoomRefreshedCommand.CommandId, roomRefreshContent);
                    }
                }
            }
        }
Пример #31
0
 protected override void OnRun(ServerCommandArgs args)
 {
     ServerModel.Server.SendMessage(args.ConnectionId, ClientPingResponceCommand.CommandId, true);
 }
Пример #32
0
 protected override void OnRun(ServerCommandArgs args)
 {
   ServerModel.Server.SendMessage(args.ConnectionId, ClientPingResponceCommand.CommandId, true);
 }
Пример #33
0
 protected override void OnRun(ServerCommandArgs args)
 {
     ServerModel.Api.RemoveUser(args.ConnectionId);
 }
Пример #34
0
    protected override void OnRun(ServerCommandArgs args)
    {

    }