public ConversationCommand Generate(AVIMConversation conversation)
        {
            var attr = conversation.EncodeAttributes();
            var cmd = new ConversationCommand().Attr(attr)
                .Members(conversation.MemberIds).Transient(conversation.IsTransient);

            return cmd;
        }
Exemple #2
0
 public Task TestCase()
 {
     return(AVRealtime.Instance.CreateClient("junwu").ContinueWith(t =>
     {
         var client = t.Result;
         var conversation = AVIMConversation.CreateWithoutData("", t.Result);
         return t.Result.SendMessageAsync(conversation, new AVIMTextMessage("haha"), options: new AVIMSendOptions());
     }));
 }
Exemple #3
0
 public Task <AVIMConversation> GetTestConversation(string clientId, string convId)
 {
     return(GetClient(clientId).ContinueWith(t =>
     {
         MyWebSocketClient.ClientInstance = t.Result;
         var conversation = AVIMConversation.CreateWithoutData(convId, MyWebSocketClient.ClientInstance);
         return conversation;
     }));
 }
Exemple #4
0
 public Conversation()
 {
     InitializeComponent();
     DataContext  = App.ViewModel.SelectedConversationVM;
     conversation = App.ViewModel.SelectedConversationVM.AVConversation;
     messages     = App.ViewModel.SelectedConversationVM.Messages;
     conversation.OnMessageReceived      += AVConversation_OnMessageRecieved;
     conversation.OnTextMessageReceived  += conversation_OnTextMessageReceived;
     conversation.OnImageMessageReceived += conversation_OnImageMessageReceived;
 }
        public ConversationCommand Generate(AVIMConversation conversation)
        {
            var attr = conversation.EncodeAttributes();
            var cmd  = new ConversationCommand()
                       .ConversationId(conversation.ConversationId)
                       .Attr(attr)
                       .Members(conversation.MemberIds).
                       Transient(conversation.IsTransient);

            return(cmd);
        }
Exemple #6
0
 public void QueryMessageBeforeMessageIdTest()
 {
     this.realtime.CreateClientAsync("1001").ContinueWith(t =>
     {
         client   = t.Result;
         var conv = AVIMConversation.CreateWithoutData("5b1a40295b90c830ff7f2ec7", client);
         return(client.QueryMessageAsync(conv, "h3tXZM3rQa+goG7N6_DaKg"));
     }).Unwrap().ContinueWith(s =>
     {
         var messages = s.Result;
     }).Wait();
 }
        public void Conversation_Join()
        {
            AVClient.Initialize("uay57kigwe0b6f5n0e1d4z4xhydsml3dor24bzwvzr57wdap", "kfgz7jjfsk55r5a8a3y4ttd3je1ko11bkibcikonk32oozww");
            var client = new AVIMClient("John");

            client.UseLeanEngineSignatureFactory();

            client.ConnectAsync().ContinueWith(_ =>
            {
                AVIMConversation consersation = AVIMConversation.CreateWithoutData("575e88521532bc0060995d32", client);
                consersation.JoinAsync().Wait();
            }).Wait();
        }
        public async Task <IEnumerable <AVIMConversation> > LoadAllConversationsInTeamAsync(string teamId = null, Team team = null)
        {
            var wrappedTeam = wrapTeam(teamId, team);
            var query       = new AVQuery <AVObject>("_Conversation")
                              .WhereEqualTo("team", wrappedTeam).Limit(300);

            var result = await query.FindAsync();

            return(result.Select(x =>
            {
                return AVIMConversation.CreateWithData(x, client);
            }));
        }
        private async void lls_contacts_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lls_contacts.SelectedItem == null)
            {
                return;
            }

            var contact = e.AddedItems[0] as DemoContact;                                                                    //选择的联系人

            var conversations = await App.ViewModel.CurrentClient.GetQuery().WhereContains("m", contact.UserId).FindAsync(); //查询之前是否有过对话

            AVIMConversation conversation = null;

            if (conversations.Count() > 0)
            {
                conversation = conversations.FirstOrDefault();//如果有就不用创建新的。
            }
            else
            {
                conversation = await App.ViewModel.CurrentClient.CreateConversationAsync(contact.UserId, "xxxx", new Dictionary <string, object>() { { "type", "private" } });//创建新的对话,并且加上自定义的属性标识它为一个 私有的对话(私聊)
            }
            var existVMs = App.ViewModel.ConversationsListVM.Where(t =>
            {
                if (t.AVConversation == null)
                {
                    return(false);
                }
                return(t.AVConversation.ConversationId == conversation.ConversationId);
            }
                                                                   );
            ConversationViewModel existVM = null;

            if (existVMs.Count() == 0)
            {
                existVM = new ConversationViewModel()
                {
                    AVConversation = conversation
                };
                App.ViewModel.ConversationsListVM.Add(existVM);
            }
            else
            {
                existVM = existVMs.FirstOrDefault();
            }
            App.ViewModel.SelectedConversationVM = existVM;

            lls_contacts.SelectedItem = null;
            NavigationService.Navigate(new Uri("/Conversation.xaml", UriKind.RelativeOrAbsolute));
        }
        private void lbx_conversations_SelectedIndexChanged(object sender, EventArgs e)
        {
            var selection = (AVIMConversation)lbx_conversations.SelectedItem;

            currentConversation    = selection;
            membersInConversation  = new BindingList <string>(selection.MemberIds);
            lbx_members.DataSource = membersInConversation;
            if (!historyDictionary.ContainsKey(selection.ConversationId))
            {
                historyDictionary.Add(selection.ConversationId, new BindingList <string>());
            }

            lbx_history.DataSource = historyDictionary[selection.ConversationId];
            Log("当前选择对话为: " + selection.Name + ",对话最后更新的时间为:" + selection.UpdatedAt.Value.ToShortTimeString());
        }
Exemple #11
0
        private async void btn_join_Click(object sender, EventArgs e)
        {
            var convId = this.txb_convId.Text.Trim();

            this.conversation = await client.GetConversationAsync(convId, true);

            await client.JoinAsync(this.conversation);

            //AVIMClient avIMClient = await realtime.CreateClientAsync("junwu");
            //avIMClient.OnMessageReceived += Client_OnMessageReceived;
            //AVIMConversation avIMConversation = await avIMClient.GetConversationAsync("5940e71b8fd9c5cf89fb91b7", true);
            //if (avIMConversation != null)
            //{
            //    await avIMConversation.JoinAsync();
            //}
        }
Exemple #12
0
        public ConversationSessionViewModel(AVIMConversation conversation)
            : this()
        {
            this.ConversationInSession = conversation;
            Name = this.ConversationInSession.Name;

            conversation.CurrentClient.OnMessageReceived += CurrentClient_OnMessageReceived;

            conversation.CurrentClient.OnMembersJoined += CurrentClient_OnMembersJoined;

            conversation.CurrentClient.OnInvited += CurrentClient_OnInvited;



            MessageQueue = new SnackbarMessageQueue();
        }
Exemple #13
0
 //好友操作事件监听(好友邀请反馈事件:拒绝)
 private void OnMembersLeft(object sender, AVIMOnMembersLeftEventArgs e)
 {
     //排除自身引发的事件
     if (e.LeftMembers.First() != AVUser.CurrentUser.ObjectId)
     {
         App.Current.Dispatcher.Invoke((Action)(async() =>
         {
             AVIMConversation LeftConversation = await User.GetConversationAsync(e.ConversationId);
             AVUser LeftUser = await AVUser.Query.GetAsync(e.LeftMembers.First());
             //好友邀请反馈事件:拒绝
             if (LeftConversation.IsUnique)
             {
                 new Tip("提醒", LeftUser.Username + "拒绝了您的好友请求");
             }
         }));
     }
 }
Exemple #14
0
        public ConversationCommand Generate(AVIMConversation conversation)
        {
            var attr = conversation.EncodeAttributes();
            var cmd  = new ConversationCommand()
                       .ConversationId(conversation.ConversationId)
                       .Attr(attr)
                       .Members(conversation.MemberIds)
                       .Transient(conversation.IsTransient)
                       .Temporary(conversation.IsTemporary);

            if (conversation.IsTemporary)
            {
                var ttl = (conversation.expiredAt.Value - DateTime.Now).TotalSeconds;
                cmd = cmd.TempConvTTL(ttl);
            }

            return(cmd);
        }
Exemple #15
0
        private async void btn_create_Click(object sender, EventArgs e)
        {
            //var isTransient = ckb_isTransient.Checked;
            //conversation = await client.CreateConversationAsync(txb_friend.Text.Trim());
            conversation = AVIMConversation.CreateWithoutData(txb_convId.Text.Trim(), this.client);
            var messageInterator = conversation.GetMessagePager();
            var lastestMessages  = await messageInterator.PreviousAsync();

            BindMessagesToUI(lastestMessages);
            //var lastestMessages2 = await messageInterator.PreviousAsync();
            //BindMessagesToUI(lastestMessages2);


            //messageInterator.From = DateTime.Now.AddDays(-1);
            //var afterMessages = await messageInterator.NextAsync();
            //BindMessagesToUI(afterMessages);
            //var afterMessages2 = await messageInterator.NextAsync();
            //BindMessagesToUI(afterMessages2);
        }
Exemple #16
0
    Task <AVIMConversation> GetTestConversation(string clientId, string convId)
    {
        Func <Task <AVIMClient> > getClient = () =>
        {
            if (MyWebSocketClient.ClientInstance != null)
            {
                return(Task.FromResult <AVIMClient>(MyWebSocketClient.ClientInstance));
            }

            return(AVRealtime.Instance.CreateClient(clientId));
        };

        return(getClient().ContinueWith(t =>
        {
            MyWebSocketClient.ClientInstance = t.Result;
            var conversation = AVIMConversation.CreateWithoutData(convId, MyWebSocketClient.ClientInstance);
            return conversation;
        }));
    }
        public void Create_Conversation()
        {
            AVClient.Initialize("uay57kigwe0b6f5n0e1d4z4xhydsml3dor24bzwvzr57wdap", "kfgz7jjfsk55r5a8a3y4ttd3je1ko11bkibcikonk32oozww");
            var client = new AVIMClient("Tom");

            client.UseLeanEngineSignatureFactory();
            AVIMConversation convseation = new AVIMConversation()
            {
                Name        = "xman",
                IsTransient = false,
            };

            convseation.MemberIds = new List <string>();
            convseation.MemberIds.Add("Jerry");

            client.ConnectAsync().ContinueWith(_ =>
            {
                client.CreateConversationAsync(convseation, true).Wait();
            }).Wait();
        }
Exemple #18
0
 //右键快捷菜单“删除好友”
 private void ContextMenuDelete_Click(object sender, RoutedEventArgs e)
 {
     App.Current.Dispatcher.Invoke((Action)(async() =>
     {
         UserList friend = MyFriendsList[friendlist.SelectedIndex];
         if (MessageBox.Show("确定要删除" + friend.Name + "吗", "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
         {
             //移除listitem,再重新绑定listitemsource
             MyFriendsList.RemoveAt(friendlist.SelectedIndex);
             friendlist.ItemsSource = null;
             friendlist.ItemsSource = MyFriendsList;
             new Tip("提示", "已成功解除与" + friend.Name + "的好友关系", 3).Show();
             //将对方踢出自己的FriendsConversation,对方触发onkick事件
             await User.KickAsync(FriendsConversation, member: friend.Friend.ObjectId);
             //再将双方单独的_Conversation删除
             try
             {
                 List <string> members = new List <string>();
                 members.Add(AVUser.CurrentUser.ObjectId);
                 members.Add(friend.Friend.ObjectId);
                 await(await AVObject.GetQuery("_Conversation").WhereEqualTo("m", members).FirstAsync()).DeleteAsync();
             }
             catch
             {
                 try
                 {
                     List <string> members = new List <string>();
                     members.Add(friend.Friend.ObjectId);
                     members.Add(AVUser.CurrentUser.ObjectId);
                     await(await AVObject.GetQuery("_Conversation").WhereEqualTo("m", members).FirstAsync()).DeleteAsync();
                 }
                 catch
                 {
                     MessageBox.Show("你早就被人家拉黑了");
                 }
             }
             //重新获取FriendsConversation
             FriendsConversation = await User.GetConversationAsync(AVUser.CurrentUser.Get <string>("Friends"));
         }
     }));
 }
    public void JoinLobby()
    {
        _avRealtime.CreateClientAsync(UserInfo.User).ContinueWith(t => _client = t.Result).ContinueWith(s =>
        {
            _client.OnMessageReceived += OnMessageReceived;
            Debug.Log("Joining");
            // 构建对话的时候需要指定一个 AVIMClient 实例做关联
            _lobbyConversation = AVIMConversation.CreateWithoutData(ConversationId, _client);
            _client.JoinAsync(_lobbyConversation).ContinueWith(a =>
            {
                if (a.IsFaulted)
                {
                    _lobbyConversation = null;
                    Debug.Log("Join failed");

                    return;
                }
                Debug.Log("Joined and sending message");
            });
        });
    }
Exemple #20
0
        public async Task InitChatSDK()
        {
            string userid = string.Empty;
            string roomid = string.Empty;

            try
            {
                userid = VenueRtcCLI.VenueRTC.Instance.getUserId();
                roomid = VenueRtcCLI.VenueRTC.Instance.getRoomId();
            }
            catch (Exception ex)
            {
                App.LogError(ex);
            }
            AVClient.Initialize("Q2BQPmQMCARUy2LY6pqc8Tk3-gzGzoHsz", "5jl51fyVTMUhHt6ddghrXNTa");
            AVRealtime realtime = new AVRealtime("Q2BQPmQMCARUy2LY6pqc8Tk3-gzGzoHsz", "5jl51fyVTMUhHt6ddghrXNTa");

            Websockets.Net.WebsocketConnection.Link();
            vIMClient = await realtime.CreateClientAsync(userid);

            AVIMConversationQuery   query         = vIMClient.GetChatRoomQuery().WhereEqualTo("name", roomid);
            List <AVIMConversation> conversations = (List <AVIMConversation>)(await query.FindAsync());

            if (conversations == null || conversations.Count == 0)
            {
                conversation = await vIMClient.CreateChatRoomAsync(roomid);
            }
            else
            {
                conversation = conversations[0];
            }

            await vIMClient.JoinAsync(conversation);

            await getHistoryMessage();

            vIMClient.OnMessageReceived += VIMClient_OnMessageReceived;
        }
        private async void selfClient_OnMessageReceieved(object sender, AVIMOnMessageReceivedEventArgs e)
        {
            var flag = currentConversation != null;
            await e.Conversation.FetchAsync();

            currentConversation = await selfClient.GetQuery().GetAsync(e.Conversation.ConversationId);

            if (flag)
            {
                flag = e.Conversation.ConversationId == currentConversation.ConversationId;
            }
            if (flag)
            {
                RefreshUI(() =>
                {
                    CacheMessage(e.Conversation, e.Message);
                });
            }
            else
            {
                CacheMessage(e.Conversation, e.Message);
            }
        }
        private void CacheMessage(AVIMConversation conversation, AVIMMessage message)
        {
            if (historyDictionary == null)
            {
                historyDictionary = new Dictionary <string, BindingList <string> >();
            }
            var record = message.FromClientId + ": " + EscapedMessage(message);

            if (historyDictionary.ContainsKey(conversation.ConversationId))
            {
                historyDictionary[conversation.ConversationId].Add(record);
            }
            else
            {
                var history = new BindingList <string>();
                history.Add(record);
                historyDictionary.Add(conversation.ConversationId, history);
            }

            RefreshUI(() =>
            {
                Log("收到 " + message.FromClientId + " 发送的消息;");
            });
        }
Exemple #23
0
 //添加好友事件监听(好友邀请事件:同意,拒绝,好友邀请反馈事件:同意)
 private void OnInvited(object sender, AVIMOnInvitedEventArgs e)
 {
     //排除自身引发的事件
     if (e.InvitedBy != AVUser.CurrentUser.ObjectId)
     {
         App.Current.Dispatcher.Invoke((Action)(async() =>
         {
             AVIMConversation InvitedConversation = await User.GetConversationAsync(e.ConversationId);
             AVUser InvitedUser = await AVUser.Query.GetAsync(e.InvitedBy);
             //好友邀请事件
             if (InvitedConversation.IsUnique)
             {
                 //同意
                 if (MessageBox.Show(InvitedUser.Username + "请求添加您为好友,是否通过?", "添加好友请求", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                 {
                     //将对方加入自己的FriendsConversation
                     await User.InviteAsync(FriendsConversation, e.InvitedBy);
                     //重新获取FriendsConversation==》不必要
                     FriendsConversation = await User.GetConversationAsync(AVUser.CurrentUser.Get <string>("Friends"));
                     //重新绑定listbox数据
                     BindingFriendListSrouce(e.InvitedBy);
                 }
                 //拒绝
                 else
                 {
                     //拒绝即为删除邀请者创建的Conversation
                     try
                     {
                         List <string> members = new List <string>();
                         members.Add(AVUser.CurrentUser.ObjectId);
                         members.Add(InvitedUser.ObjectId);
                         await(await AVObject.GetQuery("_Conversation").WhereEqualTo("m", members).FirstAsync()).DeleteAsync();
                     }
                     catch
                     {
                         try
                         {
                             List <string> members = new List <string>();
                             members.Add(InvitedUser.ObjectId);
                             members.Add(AVUser.CurrentUser.ObjectId);
                             await(await AVObject.GetQuery("_Conversation").WhereEqualTo("m", members).FirstAsync()).DeleteAsync();
                         }
                         catch
                         {
                             MessageBox.Show("给舔狗一条活路吧");
                         }
                     }
                     finally
                     {
                         new Tip("提醒", "已拒绝 " + InvitedUser.Username + "的好友邀请", 3);
                     }
                 }
             }
             //好友邀请反馈事件:同意
             if (!InvitedConversation.IsUnique)
             {
                 //将对方加入自己的FriendsConversation
                 if (!FriendsConversation.MemberIds.Contains(e.InvitedBy))
                 {
                     new Tip("提醒", "已成功添加 " + InvitedUser.Username);
                     await User.InviteAsync(FriendsConversation, e.InvitedBy);
                     //重新获取FriendsConversation==》不必要
                     FriendsConversation = await User.GetConversationAsync(AVUser.CurrentUser.Get <string>("Friends"));
                     //重新绑定listbox数据
                     BindingFriendListSrouce(e.InvitedBy);
                 }
             }
         }));
     }
 }
Exemple #24
0
        static void Test()
        {
            //var appId = "nb4egfMaDOj6jzqRhBuWpk5m-gzGzoHsz";
            //var appKey = "zJ4aUsCraV6eBE6dGHWYE57z";

            var appId  = "Eohx7L4EMfe4xmairXeT7q1w-gzGzoHsz";
            var appKey = "GSBSGpYH9FsRdCss8TGQed0F";

            AVIMConversation conv = null;

            Console.WriteLine($"test at {Thread.CurrentThread.ManagedThreadId}");
            AVClient.Initialize(appId, appKey);
            AVRealtime realtime = new AVRealtime(new AVRealtime.Configuration {
                ApplicationId  = appId,
                ApplicationKey = appKey,
                //RealtimeServer = new Uri("wss://rtm51.leancloud.cn/"),
            });

            realtime.CreateClientAsync("lean").ContinueWith(t => {
                if (t.IsFaulted)
                {
                    Console.WriteLine($"create client failed at {Thread.CurrentThread.ManagedThreadId}");
                    throw t.Exception;
                }
                Console.WriteLine($"create client at {Thread.CurrentThread.ManagedThreadId}");
                AVIMClient client         = t.Result;
                client.OnMessageReceived += (sender, e) => {
                    Console.WriteLine($"{e.Message.Id} is received at {Thread.CurrentThread.ManagedThreadId}");
                };
                client.OnMessageRecalled += (sender, e) => {
                    Console.WriteLine($"{e.Message} is recall at {Thread.CurrentThread.ManagedThreadId}");
                };
                client.OnMessageUpdated += (sender, e) => {
                    Console.WriteLine($"{e.Message} is updated at {Thread.CurrentThread.ManagedThreadId}");
                };
                realtime.OnDisconnected += (sender, e) => {
                    Console.WriteLine($"{client.ClientId} is disconnected");
                    try {
                        conv.SendTextAsync("I am disconnected");
                    } catch (Exception err) {
                        Console.WriteLine($"send error: {err.Message}");
                    }
                };
                realtime.OnReconnecting += (sender, e) => {
                    Console.WriteLine($"{client.ClientId} is reconnecting");
                };
                realtime.OnReconnected += (sender, e) => {
                    Console.WriteLine($"{client.ClientId} is reconnected");
                    conv.SendTextAsync("I am reconnected");
                };
                //realtime.CreateClient("aaa").ContinueWith(xxx => {
                //    if (xxx.IsFaulted) {
                //        Console.WriteLine($"create xxx error: {xxx.Exception.Message} at {Thread.CurrentThread.ManagedThreadId}");
                //    } else {
                //        Console.WriteLine($"create xxx at {Thread.CurrentThread.ManagedThreadId}");
                //    }
                //});
                return(client.CreateConversationAsync(members: new string[] { "xxx", "zzz" }));
            }).Unwrap().ContinueWith(t => {
                if (t.IsFaulted)
                {
                    throw t.Exception;
                }
                Console.WriteLine($"create conversation at {Thread.CurrentThread.ManagedThreadId}");
                conv = t.Result;
                return(conv.SendTextAsync("无码种子"));
            }).Unwrap().ContinueWith(t => {
                if (t.IsFaulted)
                {
                    throw t.Exception;
                }
                Console.WriteLine($"send message at {Thread.CurrentThread.ManagedThreadId}");
                Console.WriteLine("send success");
            });


            //await client.CloseAsync();

            //client = await realtime.CreateClientAsync("leancloud");

            //await client.CloseAsync();

            //var newMsg = new AVIMTextMessage("大家好");

            //var timer = new Timer {
            //    Interval = 1000,
            //};
            //timer.Elapsed += async (sender, e) => {
            //    timer.Stop();

            //    try {
            //        var modifiedMsg = await conv.UpdateAsync(msg, newMsg);
            //        Console.WriteLine($"{modifiedMsg.Id} 修改成功");
            //    } catch (Exception exception) {
            //        Console.WriteLine(exception.Message);
            //    }

            //    //try {
            //    //    var recalledMsg = await conv.RecallAsync(msg);
            //    //    Console.WriteLine($"{recalledMsg.Id} is recalled");
            //    //} catch (Exception exception) {
            //    //    Console.WriteLine(exception.Message);
            //    //}
            //};
            //timer.Start();
        }
Exemple #25
0
 public async void CreateConversation()
 {
     conversation = await client.CreateConversationAsync("Jerry", name : "Tom 和 Jerry 的私聊对话");
 }
Exemple #26
0
 public Addfriend(AVIMClient user, AVIMConversation conversation) : this()
 {
     User         = user;
     Conversation = conversation;
 }
Exemple #27
0
 private async void btn_create_Click(object sender, EventArgs e)
 {
     //var isTransient = ckb_isTransient.Checked;
     conversation = await client.CreateConversationAsync(txb_friend.Text.Trim());
 }