Ejemplo n.º 1
0
    static int Main()
    {
        Test   t1    = new Test();
        ObjRef myref = RemotingServices.Marshal(t1, "/test");

        Console.WriteLine("OBJREF: " + myref.URI);

        string url = "simple://localhost:8000/test";
        string uri;

        SimpleChannel chnl = new SimpleChannel(8000);

        ChannelServices.RegisterChannel(chnl);

        Console.WriteLine("Channel name: " + chnl.ChannelName);
        Console.WriteLine("Channel priority: " + chnl.ChannelPriority);
        Console.WriteLine("URI: " + chnl.Parse(url, out uri));
        Console.WriteLine("URI: " + uri);


        Test tp = (Test)RemotingServices.Connect(typeof(Test), url);

        int res = tp.test_function(4, true);

        Console.WriteLine("RESULT: " + res);

        chnl.StopListening(null);

        return(0);
    }
Ejemplo n.º 2
0
        /// <summary>
        /// Make SimpleChannel from GuildChannel with overriden LastMessageId
        /// </summary>
        /// <param name="channel">GuildChannel</param>
        /// <param name="overridelastmessageid">New LastMessageId</param>
        /// <returns>SimpleChannel</returns>
        public static SimpleChannel MakeChannel(GuildChannel channel, string overridelastmessageid = null)
        {
            // Create basic SimpleChannel
            SimpleChannel sc = new SimpleChannel
            {
                Id   = channel.Id,
                Name = channel.Name,
                Type = channel.Type,
                Nsfw = channel.NSFW,
                // Override LastMessageId
                LastMessageId = overridelastmessageid ?? channel.LastMessageId,
                Position      = channel.Position,
                ParentId      = channel.ParentId,
                Icon          = channel.Icon
            };

            // Determine if has permission
            sc.HavePermissions =
                LocalState.Guilds[App.CurrentGuildId].channels[sc.Id].permissions.ReadMessages ||
                App.CurrentGuildId == sc.Id;

            // Determine if SimpleChannel should be displayed
            if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
            {
                return(sc);
            }

            return(null);
        }
Ejemplo n.º 3
0
        public void JoinChannel(int channelId)
        {
            Channel channel = DB.Channels.Find(channelId);

            if (channel == null)
            {
                Clients.Caller.Alert("Kanalen med id \"" + channelId + "\" blev ikke fundet.");
                return;
            }
            User user = DB.Connections.Find(Context.ConnectionId).User;

            if (user == null)
            {
                return;
            }
            if (channel.GetUsers().Contains(user))
            {
                Clients.Caller.Alert("Du er allerede i denne kanal.");
                return;
            }
            channel.AddUser(user);
            DB.SaveChanges();
            SimpleChannel sc = channel.ToSimpleChannel();

            foreach (Connection connection in user.Connections)
            {
                Clients.Client(connection.ConnectionId).AppendChannel(sc);
            }
            SimpleUser su = user.ToSimpleUser();

            foreach (Connection connection in channel.Users.SelectMany(us => us.Connections))
            {
                Clients.Client(connection.ConnectionId).AppendUser(su, channel.Id);
            }
        }
Ejemplo n.º 4
0
        public void CreateNewChannel(string channelName)
        {
            //var user = DB.Users.SingleOrDefault(u => u.ConnectionId.Equals(Context.ConnectionId));
            Connection con = DB.Connections.Find(Context.ConnectionId);

            if (con == null)
            {
                return;
            }
            User user = con.User;

            if (user == null)
            {
                return;
            }
            if (user.AreAdministratorIn.Count > 14)
            {
                Clients.Caller.Alert("Du kan ikke oprette mere end 15 kanaler af gangen");
                return;
            }
            Channel channel = new Channel(user, channelName);

            channel.AddUser(user);
            DB.Users.AddOrUpdate(user);
            DB.Channels.Add(channel);
            DB.SaveChanges();
            SimpleChannel sc = channel.ToSimpleChannel();

            sc.IsAdmin = true;
            foreach (Connection connection in user.Connections)
            {
                Clients.Client(connection.ConnectionId).AppendChannel(sc);
            }
        }
Ejemplo n.º 5
0
        private async void serverOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var guild = (SimpleGuild)e.AddedItems[0];
            List <SimpleChannel> channels = new List <SimpleChannel>();

            if (guild.Id == "@me")
            {
                var userchannels = await RESTCalls.GetDMs();

                foreach (var channel in userchannels)
                {
                    SimpleChannel c = new SimpleChannel();
                    c.Id = channel.Id;
                    if (!string.IsNullOrEmpty(channel.Name))
                    {
                        c.Name = channel.Name;
                    }
                    else if (channel.Users != null && channel.Users.Any())
                    {
                        c.Name = channel.Users.First().Username;
                    }
                    c.LastMessageId = "@";
                    channels.Add(c);
                }
            }
            else
            {
                var userchannels = await RESTCalls.GetGuildChannels(guild.Id);

                foreach (var channel in userchannels)
                {
                    if (channel.Type != 2 && channel.Type != 4)
                    {
                        channels.Add(ChannelManager.MakeChannel(channel, "#"));
                    }
                }
            }
            channelOption.ItemsSource = channels;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Create a List of SimpleChannels from a List of DirectMessageChannels
        /// </summary>
        /// <param name="channels">List of DirectMessageChannels</param>
        /// <returns>List of SimpleChannels</returns>
        public static List <SimpleChannel> OrderChannels(List <DirectMessageChannel> channels)
        {
            // Create return list
            List <SimpleChannel> returnChannels = new List <SimpleChannel>();

            foreach (var channel in channels)
            {
                SimpleChannel sc = new SimpleChannel();
                sc.Id   = channel.Id;
                sc.Type = channel.Type;
                switch (channel.Type)
                {
                // DM
                case 1:
                    // Assign basic DM info
                    sc.Name          = "@" + channel.Users.FirstOrDefault().Username;
                    sc.UserId        = channel.Users.FirstOrDefault().Id;
                    sc.LastMessageId = channel.LastMessageId;
                    sc.ImageURL      = "https://cdn.discordapp.com/avatars/" + channel.Users.FirstOrDefault().Id + "/" + channel.Users.FirstOrDefault().Avatar + ".png?size=64";

                    // Add members
                    sc.Members = new Dictionary <string, User>();
                    foreach (User user in channel.Users)
                    {
                        sc.Members.Add(user.Id, user);
                    }

                    // Determine presence
                    if (LocalState.PresenceDict.ContainsKey(channel.Users.FirstOrDefault().Id))
                    {
                        sc.UserStatus = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id];
                        sc.Playing    = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game;
                        if (LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game != null)
                        {
                            sc.Playing = new Game()
                            {
                                Name = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game
                                       .Name,
                                Type = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game.Type,
                                Url  = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game.Url
                            };
                        }
                    }
                    else
                    {
                        sc.UserStatus = new Presence()
                        {
                            Status = "offline"
                        };
                    }


                    // Determine unread and notifcation status
                    if (LocalState.RPC.ContainsKey(sc.Id))
                    {
                        ReadState readstate = LocalState.RPC[sc.Id];
                        sc.NotificationCount = readstate.MentionCount;
                        var StorageChannel = LocalState.DMs[sc.Id];
                        if (StorageChannel.LastMessageId != null &&
                            readstate.LastMessageId != StorageChannel.LastMessageId)
                        {
                            sc.IsUnread = true;
                        }
                        else
                        {
                            sc.IsUnread = false;
                        }
                    }

                    // Add to return channel list
                    sc.HavePermissions = true;
                    returnChannels.Add(sc);
                    break;

                // Group DM
                case 3:
                    // Assign basic Group info
                    sc.Name          = channel.Name;
                    sc.LastMessageId = channel.LastMessageId;
                    sc.Subtitle      = App.GetString("/Main/members").Replace("<count>", (channel.Users.Count() + 1).ToString());
                    sc.Icon          = channel.Icon;

                    // Override group name
                    if (channel.Name != null && channel.Name != "")
                    {
                        sc.Name = channel.Name;
                    }
                    else
                    {
                        List <string> channelMembers = new List <string>();
                        foreach (var d in channel.Users)
                        {
                            channelMembers.Add(d.Username);
                        }
                        sc.Name = string.Join(", ", channelMembers);
                    }

                    // Determine unread and notification status
                    if (LocalState.RPC.ContainsKey(sc.Id))
                    {
                        ReadState readstate = LocalState.RPC[sc.Id];
                        sc.NotificationCount = readstate.MentionCount;
                        var StorageChannel = LocalState.DMs[sc.Id];
                        if (StorageChannel.LastMessageId != null &&
                            readstate.LastMessageId != StorageChannel.LastMessageId)
                        {
                            sc.IsUnread = true;
                        }
                        else
                        {
                            sc.IsUnread = false;
                        }
                    }

                    // Add channel to return list
                    sc.HavePermissions = true;
                    returnChannels.Add(sc);
                    break;
                }
            }

            // Order by LastMessageId
            return(returnChannels.OrderByDescending(x => x.LastMessageId).ToList());
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Make a List of SimpleChannels from a List of GuildChannels
        /// </summary>
        /// <param name="channels">List of GuildChannels</param>
        /// <returns>List of SimpleChannels</returns>
        public static List <SimpleChannel> OrderChannels(List <LocalModels.GuildChannel> channels)
        {
            // Create return list
            List <SimpleChannel> returnChannels = new List <SimpleChannel>();

            // For each channel
            foreach (var channel in channels)
            {
                // Create basic SimpleChannel
                SimpleChannel sc = new SimpleChannel();
                sc.Id       = channel.raw.Id;
                sc.Name     = channel.raw.Name;
                sc.Type     = channel.raw.Type;
                sc.Position = channel.raw.Position;
                sc.ParentId = channel.raw.ParentId;
                sc.Nsfw     = channel.raw.NSFW;

                switch (channel.raw.Type)
                {
                // Text Channel
                case 0:
                    // Determine muted
                    sc.IsMuted = LocalState.GuildSettings.ContainsKey(channel.raw.GuildId) && (LocalState.GuildSettings[channel.raw.GuildId].channelOverrides.ContainsKey(channel.raw.Id) && LocalState.GuildSettings[channel.raw.GuildId].channelOverrides[channel.raw.Id].Muted);

                    // Determine Unread and Notification status
                    if (LocalState.RPC.ContainsKey(sc.Id))
                    {
                        ReadState readstate = LocalState.RPC[sc.Id];
                        sc.NotificationCount = readstate.MentionCount;
                        var storageChannel = LocalState.CurrentGuild.channels[sc.Id];
                        sc.IsUnread = storageChannel?.raw.LastMessageId != null &&
                                      readstate.LastMessageId != storageChannel.raw.LastMessageId;
                    }

                    // Detemine if user has read permissions
                    sc.HavePermissions =
                        LocalState.CurrentGuild.channels[sc.Id].permissions.ReadMessages ||
                        App.CurrentGuildId == sc.Id;

                    // Determine if user should see channel
                    if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
                    {
                        returnChannels.Add(sc);
                    }
                    break;

                // Voice Channel
                case 2:
                    // Determine if user has Connect permissions
                    sc.HavePermissions =
                        LocalState.CurrentGuild.channels[sc.Id].permissions.Connect ||
                        App.CurrentGuildId == sc.Id;

                    // Determine if user should see channel
                    if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
                    {
                        returnChannels.Add(sc);
                    }
                    break;

                // Category
                case 4:
                    sc.HavePermissions =
                        LocalState.CurrentGuild.channels[sc.Id].permissions.ReadMessages ||
                        LocalState.CurrentGuild.channels[sc.Id].permissions.Connect;
                    sc.Name = sc.Name.ToUpper();

                    if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
                    {
                        returnChannels.Add(sc);
                    }
                    break;
                }
            }

            var Categorized             = returnChannels.Where(x => x.ParentId != null && x.Type != 4).OrderBy(x => x.Type).ThenBy(x => x.Position);
            var Categories              = returnChannels.Where(x => x.Type == 4).OrderBy(x => x.Position).ToList();
            List <SimpleChannel> Sorted = new List <SimpleChannel>();

            foreach (var noId in returnChannels.Where(x => x.ParentId == null && x.Type != 4).OrderBy(x => x.Type).ThenBy(x => x.Position))
            {
                Sorted.Add(noId);
            }
            foreach (var categ in Categories)
            {
                if (Categorized.Where(x => x.ParentId == categ.Id).Count() > 0)
                {
                    Sorted.Add(categ);
                    foreach (var item in Categorized.Where(x => x.ParentId == categ.Id))
                    {
                        Sorted.Add(item);
                    }
                }
            }
            return(Sorted);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Make SimpleChannel based on GuildChannel
        /// </summary>
        /// <param name="channel">GuildChannel</param>
        /// <returns>SimpleChannel</returns>
        public static SimpleChannel MakeChannel(LocalModels.GuildChannel channel)
        {
            // Create basic SimpleChannel
            SimpleChannel sc = new SimpleChannel
            {
                Id       = channel.raw.Id,
                Name     = channel.raw.Name,
                Type     = channel.raw.Type,
                Nsfw     = channel.raw.NSFW,
                Position = channel.raw.Position,
                ParentId = channel.raw.ParentId,
                Icon     = channel.raw.Icon
            };

            switch (channel.raw.Type)
            {
            // Text Channel
            case 0:
                // Determine muted status
                sc.IsMuted = LocalState.GuildSettings.ContainsKey(channel.raw.GuildId) &&
                             (LocalState.GuildSettings[channel.raw.GuildId].channelOverrides
                              .ContainsKey(channel.raw.Id) && LocalState.GuildSettings[channel.raw.GuildId]
                              .channelOverrides[channel.raw.Id].Muted);

                // Determine is unread and notification count
                if (LocalState.RPC.ContainsKey(sc.Id))
                {
                    ReadState readstate = LocalState.RPC[sc.Id];
                    sc.NotificationCount = readstate.MentionCount;
                    var StorageChannel = LocalState.Guilds[App.CurrentGuildId].channels[sc.Id];
                    sc.IsUnread = StorageChannel?.raw.LastMessageId != null && readstate.LastMessageId != StorageChannel.raw.LastMessageId;
                }

                // Assing if user has read permissions
                sc.HavePermissions =
                    LocalState.Guilds[App.CurrentGuildId].channels[sc.Id].permissions.ReadMessages ||
                    App.CurrentGuildId == sc.Id;

                // Determine if SimpleChannel should be shown
                if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
                {
                    return(sc);
                }
                break;

            // Voice channel
            case 2:
                sc.HavePermissions =
                    LocalState.Guilds[App.CurrentGuildId].channels[sc.Id].permissions.Connect ||
                    App.CurrentGuildId == sc.Id;
                if (!(sc.IsMuted && Storage.Settings.HideMutedChannels) && (sc.HavePermissions || Storage.Settings.ShowNoPermissionChannels))
                {
                    return(sc);
                }
                break;

            // Category channel
            case 4:
                //TODO: Categories
                break;
            }

            return(null);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Make SimpleChannel from DMChannel
        /// </summary>
        /// <param name="channel">DMChannel</param>
        /// <returns>SimpleChannel</returns>
        public static SimpleChannel MakeChannel(DirectMessageChannel channel)
        {
            // Create basic SimpleChannel
            SimpleChannel sc = new SimpleChannel();

            sc.Id   = channel.Id;
            sc.Type = channel.Type;

            switch (channel.Type)
            {
            // DM
            case 1:
                // Assign basic DM info
                sc.Name          = "@" + channel.Users.FirstOrDefault().Username;
                sc.LastMessageId = channel.LastMessageId;
                sc.ImageURL      = "https://cdn.discordapp.com/avatars/" + channel.Users.FirstOrDefault().Id + "/" + channel.Users.FirstOrDefault().Avatar + ".png?size=64";

                // Add members
                sc.Members = new Dictionary <string, User>();
                foreach (User user in channel.Users)
                {
                    sc.Members.Add(user.Id, user);
                }

                // Determine presence
                if (LocalState.PresenceDict.ContainsKey(channel.Users.FirstOrDefault().Id))
                {
                    sc.UserStatus = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id];
                    sc.Playing    = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game;
                    if (LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game != null)
                    {
                        sc.Playing = new Game()
                        {
                            Name = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game
                                   .Name,
                            Type = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game.Type,
                            Url  = LocalState.PresenceDict[channel.Users.FirstOrDefault().Id].Game.Url
                        };
                    }
                }
                else
                {
                    sc.UserStatus = new Presence()
                    {
                        Status = "offline"
                    };
                }

                //sc.IsMuted = LocalState.GuildSettings.ContainsKey(channel.raw.GuildId) ? (LocalState.GuildSettings[channel.raw.GuildId].channelOverrides.ContainsKey(channel.raw.Id) ? LocalState.GuildSettings[channel.raw.GuildId].channelOverrides[channel.raw.Id].Muted : false) : false;
                if (LocalState.RPC.ContainsKey(sc.Id))
                {
                    ReadState readstate = LocalState.RPC[sc.Id];
                    sc.NotificationCount = readstate.MentionCount;
                    var StorageChannel = LocalState.DMs[sc.Id];
                    if (StorageChannel.LastMessageId != null &&
                        readstate.LastMessageId != StorageChannel.LastMessageId)
                    {
                        sc.IsUnread = true;
                    }
                    else
                    {
                        sc.IsUnread = false;
                    }
                }
                return(sc);

            // Group DM
            case 3:
                // Assign basic Group DM info
                sc.Name          = channel.Name;
                sc.LastMessageId = channel.LastMessageId;
                sc.Subtitle      = App.GetString("/Main/members").Replace("<count>", (channel.Users.Count() + 1).ToString());
                sc.Icon          = channel.Icon;

                // Override null name
                if (!string.IsNullOrEmpty(channel.Name))
                {
                    sc.Name = channel.Name;
                }
                else
                {
                    List <string> channelMembers = new List <string>();
                    foreach (var d in channel.Users)
                    {
                        channelMembers.Add(d.Username);
                    }
                    sc.Name = string.Join(", ", channelMembers);
                }

                // Determine Unread and Notification status
                if (LocalState.RPC.ContainsKey(sc.Id))
                {
                    ReadState readstate = LocalState.RPC[sc.Id];
                    sc.NotificationCount = readstate.MentionCount;
                    var StorageChannel = LocalState.DMs[sc.Id];
                    if (StorageChannel.LastMessageId != null &&
                        readstate.LastMessageId != StorageChannel.LastMessageId)
                    {
                        sc.IsUnread = true;
                    }
                    else
                    {
                        sc.IsUnread = false;
                    }
                }

                // Show SimpleChannel
                sc.HavePermissions = true;
                return(sc);
            }
            return(null);
        }
Ejemplo n.º 10
0
 public async Task SendSimpleCommand(CommandBytes command)
 {
     await SimpleChannel.SendData(command);
 }