Esempio n. 1
0
 public void SendMessage(string msg)
 {
     if (Server.Connected)
     {
         Server.Send("PRIVMSG " + this.Name + " :" + msg);
     }
     else
     {
         if (OnStatusMessage != null)
         {
             OnStatusMessage.Invoke("Not Connected to IRC.");
         }
     }
 }
        private void ExecuteTransfer()
        {
            var informationPanel = InformationPanel.GetInformationPanel(this, "Starting playlist transfer...", 340, 150);

            btnCancel.Visible = true;
            bwTransferData    = new BackgroundWorker {
                WorkerReportsProgress = true, WorkerSupportsCancellation = true
            };
            bwTransferData.DoWork += (sender, e) =>
            {
                var worker       = (BackgroundWorker)sender;
                var errors       = new List <Item <string, string> >();
                var autoMappings = new List <Item <EntityReference, EntityReference> >();

                #region Auto-mappings

                OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving root Business Units..."));
                // Add BU mappings
                var bumapping = AutoMappings.GetRootBusinessUnitMapping(sourceService, targetService);
                if (bumapping != null)
                {
                    autoMappings.Add(bumapping);
                }

                OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving default transaction currencies..."));
                var tcmapping = AutoMappings.GetDefaultTransactionCurrencyMapping(sourceService, targetService);
                if (tcmapping != null)
                {
                    autoMappings.Add(tcmapping);
                }

                OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving systemuser mappings..."));
                var sumapping = AutoMappings.GetSystemUsersMapping(sourceService, targetService);
                if (sumapping != null)
                {
                    autoMappings.AddRange(sumapping);
                }

                #endregion Auto-mappings

                for (int i = 0; i < list.Items.Count; i++)
                {
                    var item       = list.Items[i];
                    var entitymeta = sourceService.RetrieveEntity(item.Setting.LogicalName);
                    var attributes = entitymeta.Attributes
                                     .Where(a => (a.IsValidForCreate != null && a.IsValidForCreate.Value))// || (a.IsValidForUpdate != null && a.IsValidForUpdate.Value))
                                     .Where(a => a.IsValidForRead != null && a.IsValidForRead.Value)
                                     .Where(a => a.DisplayName != null && a.DisplayName.UserLocalizedLabel != null && !string.IsNullOrEmpty(a.DisplayName.UserLocalizedLabel.Label))
                                     .Where(a => !item.Setting.UnmarkedAttributes.Any(ua => ua.Equals(a.LogicalName)))
                                     .ToList();
                    var entity = new AppCode.EntityRecord(entitymeta, attributes, item.Actions, bwTransferData, sourceService, targetService);

                    worker.ReportProgress((i / list.Items.Count), string.Format("Transfering entity '{0}'...", entity.Name));

                    try
                    {
                        entity.Filter   = item.Setting.Filter;
                        entity.Mappings = autoMappings;
                        entity.Mappings.AddRange(item.Setting.Mappings);
                        entity.OnStatusMessage += OnStatusMessage;
                        entity.Transfer(useBulk, bulkCount);
                        errors.AddRange(entity.Messages.Select(m => new Item <string, string>(entity.Name, m)));
                    }
                    catch (FaultException <OrganizationServiceFault> error)
                    {
                        errors.Add(new Item <string, string>(entity.Name, error.Message));
                    }
                }

                e.Result = errors;
            };
            bwTransferData.RunWorkerCompleted += (sender, e) =>
            {
                btnCancel.Visible = false;
                btnCancel.Text    = @"Cancel";
                Controls.Remove(informationPanel);
                informationPanel.Dispose();
                //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards

                var errors = (List <Item <string, string> >)e.Result;

                if (errors.Count > 0)
                {
                    var errorDialog = new ErrorList((List <Item <string, string> >)e.Result);
                    errorDialog.ShowDialog(ParentForm);
                }
            };
            bwTransferData.ProgressChanged += (sender, e) =>
            {
                InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString());
                OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(e.ProgressPercentage * 100, e.UserState.ToString()));
            };
            bwTransferData.RunWorkerAsync();
        }
Esempio n. 3
0
        private void OnMessage(Message m)
        {
            Event.Invoke(this, Event.ServerEventType.Message, m);
            switch (m.Command.ToUpper())
            {
            case "NOTICE":
                if (OnNotice != null)
                {
                    OnNotice.Invoke(this, m);
                }
                break;

            case "TOPIC":
                // --> :[email protected] TOPIC #davux :Test topic
            {
                Channel c = FindChannel(m.Target);
                if (c != null)
                {
                    c.ChangeTopic(new User(this, m.Prefix), m.ListString);
                }
                else
                {
                    Trace.WriteLine("IRC/Server/OnMessage/TOPIC: Invalid Channel for TOPIC: " + m);
                }
            }
            break;

            case "PRIVMSG":
                if (m.ListString == "\x001VERSION\x001")
                {
                    Notice(m.PrefixNick, "\x001VERSION irc.net ALPHA " + Assembly.GetExecutingAssembly().GetName().Version + " " + Environment.OSVersion.Platform + "\x001");
                }
                else if (m.Target.ToLower() == Nick.ToLower())
                {
                    Channel cf = FindChannel(m.PrefixNick);
                    User    u  = new User(this, m.Prefix);
                    if (cf != null)
                    {
                        cf.MessageRcv(u, m.ListString);
                    }
                    else
                    {
                        Channel cn = new Channel(this, m.PrefixNick);
                        Channels.Add(cn);
                        if (OnJoined != null)
                        {
                            OnJoined.Invoke(this, cn);
                        }
                        cn.MessageRcv(u, m.ListString);
                    }
                }
                else
                {
                    Channel cf = FindChannel(m.Target);
                    User    u  = new User(this, m.Prefix);
                    if (cf != null)
                    {
                        cf.MessageRcv(u, m.ListString);
                    }
                    else
                    {
                        Channel cn = new Channel(this, m.Target);
                        cn.MessageRcv(u, m.ListString);
                        Channels.Add(cn);
                        if (OnJoined != null)
                        {
                            OnJoined.Invoke(this, cn);
                        }
                    }
                }

                break;

            case "JOIN":
            {
                if (m.PrefixNick.ToLower() == Nick.ToLower())
                {
                    // i joined a channel!
                    Channel c = new Channel(this, m.Target);
                    if (OnJoined != null)
                    {
                        OnJoined.Invoke(this, c);
                        // Thread.Sleep(1000);
                    }
                    Channels.Add(c);
                }
                else
                {
                    // someone joined a channel that im on
                    Channel c = FindChannel(m.Target);
                    if (c != null)
                    {
                        User ux = new User(this, m.Prefix);
                        if (ux != null)
                        {
                            c.JoinUser(ux, true);
                        }
                        else
                        {
                            Trace.WriteLine("IRC/Server/OnMessage: Invalid User for JOIN: " + m);
                        }
                    }
                    else
                    {
                        Trace.WriteLine("IRC/Server/OnMessage: Invalid Channel for JOIN: " + m);
                    }
                }
                break;
            }

            case "376":
                if (OnStatusMessage != null)
                {
                    OnStatusMessage.Invoke(this, m);
                }
                if (!autoJoined)
                {
                    autoJoined = true;
                    if (OnConnected != null)
                    {
                        OnConnected.Invoke(this);
                    }
                    JoinAutoChannels();
                }
                break;

            case "005":
            {
                string[] parts = m.AfterCommandString.Split(' ');

                foreach (string p in parts)
                {
                    if (p.ToUpper().StartsWith("NETWORK="))
                    {
                        // p is network
                        Network = p.Remove(0, 8);
                    }
                    else if (p.ToUpper().StartsWith("PREFIX="))
                    {
                        ChannelModes = new ChannelModes(p.Remove(0, 7));
                    }
                }
            }
            break;

            case "MODE":
                // :DaveTest MODE DaveTest :+iwx
                // :irc.aohell.org MODE #davux +nt
                if (!autoJoined)
                {
                    autoJoined = true;
                    if (OnConnected != null)
                    {
                        OnConnected.Invoke(this);
                    }
                    JoinAutoChannels();
                }

                if (m.Target == Nick)
                {
                    // TODO own modes
                    ParseOwnModes(m.ListString);
                }
                else if (m.TargetIsChannel)
                {
                    // setting chan modes
                    Channel ct = FindChannel(m.Target);

                    if (ct != null)
                    {
                        User u = ct.FindUser(m.PrefixNick);
                        if (u != null)
                        {
                            u.SetMask(m.Prefix);
                        }
                        else
                        {
                            u = new User(this, m.Prefix);
                        }
                        ct.SetModes(u, m.AfterCommandString.Substring(m.AfterCommandString.IndexOf(' ')).Trim());
                    }
                    else
                    {
                        Trace.WriteLine("IRC/Server/OnMessage: Invalid Channel to MODE: " + m);
                    }
                }
                break;

            case "KICK":
                // --> :[email protected] KICK #davux DavXn :DavX-
            {
                Channel c      = FindChannel(m.Target);
                User    kicker = c.FindUser(m.PrefixNick);
                User    kicked = c.FindUser(m.Arg2);

                if (kicker == null || kicked == null)
                {
                    Trace.WriteLine("IRC/Server/OnMessage/KICK: No kicker or kicked " + m);
                }
                else
                {
                    if (c != null)
                    {
                        c.KickUser(kicked, kicker, m.ListString);
                    }
                    else
                    {
                        Trace.WriteLine("IRC/Server/OnMessage/KICK No Channel: " + m);
                    }
                }
            }
            break;

            case "PART":
                if (m.PrefixNick.ToLower() == Nick.ToLower())
                {
                    // i left a channel!
                    Channel c = FindChannel(m.Target);
                    if (c != null)
                    {
                        //c.Part();
                        Channels.Remove(c);
                        if (OnParted != null)
                        {
                            OnParted.Invoke(this, c);
                        }
                    }
                    else
                    {
                        Trace.WriteLine("IRC/Server/OnMessage: Invalid Channel for PART: " + m);
                    }
                }
                else
                {
                    // someone left a channel that im on
                    Channel c = FindChannel(m.Target);
                    if (c != null)
                    {
                        User ud = c.FindUser(m.PrefixNick);
                        ud.SetMask(m.Prefix);
                        if (ud != null)
                        {
                            c.PartUser(ud, m.ListString, true);
                        }
                        else
                        {
                            Trace.WriteLine("IRC/Server/OnMessage: Invalid User for PART: " + m);
                        }
                    }
                    else
                    {
                        Trace.WriteLine("IRC/Server/OnMessage: Invalid Channel for PART: " + m);
                    }
                }
                break;

            case "353":
            {
                string[] parts = m.ListString.Split(' ');

                Channel c = FindChannel(m.Arg3);
                if (c != null)
                {
                    foreach (string p in parts)
                    {
                        if (!string.IsNullOrEmpty(p))
                        {
                            string px = p;

                            if ("" != ChannelModes.ModeForSymbol(px.Substring(0, 1)))
                            {
                                px = px.Remove(0, 1);
                            }
                            bool add = true;
                            foreach (User u in c.Users)
                            {
                                if (u.Nick.ToLower() == px)
                                {
                                    add = false;
                                    break;
                                }
                            }
                            if (add)
                            {
                                c.JoinUser(new User(this, p), false);
                            }
                        }
                    }
                }
                else
                {
                    Trace.WriteLine("IRC/Server/OnMessage/353: Invalid Channel: " + m);
                }
            }
            break;

            // --> :irc.aohell.org 332 DavXn #davux :This is the topic message
            // --> :irc.aohell.org 333 DavXn #davux DavX- 1260079684
            case "332":
            {
                Channel chan = FindChannel(m.Arg2);
                if (chan != null)
                {
                    chan.Topic = m.ListString;
                }
                else
                {
                    Trace.WriteLine("IRC/Server/OnMessage/332: Invalid channel: " + m);
                }
            }
            break;

            case "333":
            {
                Channel c = FindChannel(m.Arg2);
                if (c != null)
                {
                    User u = new User(this, m.Arg3);
                    c.TopicDetails(u, m.Arg4);
                }
                else
                {
                    Trace.WriteLine("IRC/Server/OnMessage/333: Invalid channel: " + m);
                }
            }
            break;

            case "366":
                // no action.
                break;

            case "433":
                // --> :irc.redwolfs.net 433 * DavXn :Nickname is already in use.
                if (OnStatusMessage != null)
                {
                    OnStatusMessage.Invoke(this, m);
                }
                Send("NICK " + Profile.GetNick(m.Arg2));
                break;

            case "NICK":
            {
                string oldNick = m.PrefixNick;
                string newNick = m.Target;

                if (oldNick.ToLower() == Nick.ToLower())
                {
                    Nick = newNick;
                }

                foreach (Channel c in Channels)
                {
                    c.NickChanged(oldNick, newNick);
                }


                /*
                 * if (OnNickChanged != null)
                 * {
                 *  OnNickChanged.Invoke(oldNick, newNick);
                 * }
                 */
            }
            break;

            case "001":
                if (m.Target != Nick)
                {
                    string oldNick = Nick;
                    Nick = m.Target;
                    if (OnNickChanged != null)
                    {
                        OnNickChanged.Invoke(oldNick, Nick);
                    }
                }
                if (OnStatusMessage != null)
                {
                    OnStatusMessage.Invoke(this, m);
                }
                break;

            case "QUIT":
                // :[email protected] QUIT :Quit: Clfloat
            {
                User u = new User(this, m.Prefix);

                if (OnUserQuit != null)
                {
                    OnUserQuit(this, u, m.ListString);
                }

                foreach (Channel c in Channels)
                {
                    c.UserQuit(u, m.ListString);
                }
            }
            break;

            default:
                if (OnStatusMessage != null)
                {
                    OnStatusMessage.Invoke(this, m);
                }
                break;
            }
        }