Esempio n. 1
0
        public App()
        {
            _flist = new FListClientV1();
            _fchat = new FChatConnection(_flist);

            UriParser.Register(new FListUriParser(), "flist", 1);
        }
        public CharacterDialog(FChatConnection Client)
        {
            this.Client = Client;
            if (!Client.IsConnected)
            {
                Client.Connect();
            }

            InitializeComponent();

            _CharacterBox.ItemsSource   = Client.FListClient.Ticket.Characters;
            _CharacterBox.SelectedIndex = 0;
        }
Esempio n. 3
0
        public static void Run()
        {
            Console.Clear();
            Console.Title = string.Format("FChat Messenger v{0}", Assembly.GetExecutingAssembly().GetName().Version);

            Debug.Listeners.Clear();
            Debug.Listeners.Add((_ConsoleBuffer.ChatBuf as ConsoleChatBuffer).TraceListener);
            _ChannelBuffers.Add(_ConsoleBuffer);
            _InputBox.OnTextEntered += (s, e) => { TextEntry(e); };

            _Chat.AutoLogin     = false;
            _Chat.AutoPing      = true;
            _Chat.AutoReconnect = false;

            //_Chat.OnRawMessage += (_, e) =>
            //	_ConsoleBuffer.ChatBuf.PushMessage(null, $"<< {e.Command.Serialize()}");
            //_Chat.OnSendMessage += (_, e) =>
            //	_ConsoleBuffer.ChatBuf.PushMessage(null, $">> {e.Command.Serialize()}");

            _Chat.OnSYSMessage += (_, e) =>
                                  _ConsoleBuffer.ChatBuf.PushMessage(null, (e.Command as Server_SYS_ChatSYSMessage).Message);
            _Chat.OnErrorMessage += (_, e) =>
            {
                if (CurrentChannelBuffer != _ConsoleBuffer)
                {
                    _ConsoleBuffer.ChatBuf.PushMessage(null, (e.Command as Server_ERR_ChatError).Error);
                }
                CurrentChannelBuffer.ChatBuf.PushMessage(null, (e.Command as Server_ERR_ChatError).Error, MessageType.Preview, MessageSource.Remote);
            };
            _Chat.OnError += (_, e) =>
                             _ConsoleBuffer.ChatBuf.PushMessage(null, $"{e.Message}:\n${e.InnerException}");

            _Chat.OnChannelJoin += (_, e) =>
            {
                ChannelBuffer chatBuf = _ChannelBuffers.FirstOrDefault(c => c.Channel == e.Channel);
                if (chatBuf == null)
                {
                    chatBuf = new ChannelBuffer {
                        ChatBuf = new ChannelChatBuffer(e.Channel), Title = e.Channel.Title
                    };
                    _ChannelBuffers.Add(chatBuf);
                }
                else
                {
                    chatBuf.Title = e.Channel.Title;
                }
                CurrentBuffer = _ChannelBuffers.IndexOf(chatBuf);
            };

            _Chat.OnChannelChatMessage += (_, e) =>
                                          WriteMessage(e.Message, null, e.Channel, e.Character, source: MessageSource.Remote);
            _Chat.OnChannelLFRPMessage += (_, e) =>
                                          WriteMessage(e.Message, null, e.Channel, e.Character, MessageType.LFRP, MessageSource.Remote);
            _Chat.OnChannelRollMessage += (_, e) =>
                                          WriteMessage(e.Message, null, e.Channel, e.Character, MessageType.Roll, MessageSource.Remote);
            _Chat.OnCharacterChatMessage += (_, e) =>
                                            WriteMessage(e.Message, null, null, e.Character, source: MessageSource.Remote);
            _Chat.OnCharacterStatusChange += (_, e) =>
            {
                if (e.Character == Connection.LocalCharacter)
                {
                    WriteLog($"You are now {e.Character.Status}");
                    return;
                }

                var    buf = _ChannelBuffers.FirstOrDefault(c => c.Character == e.Character);
                string msg = $"{e.Character.Name} is now {e.Character.Status}";
                if (!string.IsNullOrEmpty(e.Character.StatusMessage))
                {
                    msg += ", " + e.Character.StatusMessage;
                }

                if (buf != null)
                {
                    WriteMessage(msg, buf, type: MessageType.Preview, source: MessageSource.Remote);
                }

                if (e.Character.IsFriend || e.Character.IsBookmark)
                {
                    WriteMessage(msg, _ConsoleBuffer, type: MessageType.Preview, source: MessageSource.Remote);
                }
            };
            _Chat.OnCharacterTypingChange += (_, e) =>
            {
                var buf = _ChannelBuffers.FirstOrDefault(c => c.Character == e.Character);
                if (buf == null)
                {
                    return;
                }

                buf.SystemActivity |= true;
                // TODO: Typing notification
            };

            _Chat.OnChannelLeave += (_, e) =>
            {
                int i = 0;
                foreach (var c in _ChannelBuffers)
                {
                    if (c.Channel == e.Channel)
                    {
                        if (_CurBuffer == i)
                        {
                            _CurBuffer--;
                        }

                        _ChannelBuffers.Remove(c);
                        break;
                    }
                    ++i;
                }
            };

            _Chat.OnConnected += (_, __) =>
            {
                WriteLog("Connected to server");
                if (AutoLogin && !string.IsNullOrEmpty(AutoLoginInfo.User))
                {
                    _Chat.AquireTicket(AutoLoginInfo.User, AutoLoginInfo.Pass);
                    _Chat.Login(AutoLoginInfo.Char);
                }
            };
            _Chat.OnDisconnected += (_, __) =>
            {
                WriteLog("Lost connection to server");

                if (AutoReconnect)
                {
                    if (_loginCount > 10)
                    {
                        WriteLog("Failed to auto-login 10 times in a row, aborting.");
                    }
                    else
                    {
                        _loginCount++;
                        Task.Delay(_loginCount * 5000).ContinueWith((___) => _Chat.Connect());
                    }
                }
            };
            _Chat.OnIdentified += (_, __) =>
            {
                _loginCount = 0;
                WriteLog($"Logged in to server as {_Chat.LocalCharacter.Name}");
                foreach (var buf in _ChannelBuffers)
                {
                    if (buf == _ConsoleBuffer || buf.Character != null)
                    {
                        continue;
                    }

                    JoinChannel(buf.Channel.ID);
                }
            };

            _Chat.OnOfficialListUpdate += (_, __) =>
            {
                WriteLog($"Retrieved list of {_Chat.OfficialChannels.Count} official channels.");
            };
            _Chat.OnPrivateListUpdate += (_, __) =>
            {
                WriteLog($"Retrieved list of {_Chat.PrivateChannels.Count} private channels.");
            };

            ConsoleHelper.OnDraw += (s, e) => Redraw();
            Redraw(true);
            InputLoop();

            if (_Chat != null)
            {
                _Chat.Dispose();
            }
            _Chat = null;
        }
Esempio n. 4
0
 public MessageSerializer(FChatConnection chat)
 {
     Chat = chat;
 }