예제 #1
0
 public void PostMessageToPrivateDiscussion(Message message, PrivateDiscussion PrivateDiscussion)
 {
     using (var request = new Messaging.PrivateDiscussion.Message.Base(PrivateDiscussion.ThreadId)
     {
         DefaultHeaders = new WebHeaderCollection()
         {
             { HttpRequestHeader.Accept, "application/json" },
             { HttpRequestHeader.ContentType, "application/json" },
             { HttpRequestHeader.Authorization, "Token " + Auth.Token }
         }
     }.POST(Parser.EntitytoJSON(message, message.GetType()))) { }
 }
예제 #2
0
 public void PostPrivateDiscussion(PrivateDiscussion privatediscussion)
 {
     using (var request = new Messaging.Channel.Base()
     {
         DefaultHeaders = new WebHeaderCollection()
         {
             { HttpRequestHeader.Accept, "application/json" },
             { HttpRequestHeader.ContentType, "application/json" },
             { HttpRequestHeader.Authorization, "Token " + Auth.Token }
         }
     }.POST(Parser.EntitytoJSON(privatediscussion, typeof(PrivateDiscussion)))) { }
 }
예제 #3
0
        /// <summary>
        /// Triggers when the user clicks on the "Create !" button.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CreateChannel_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(this.textBox1.Text) || string.IsNullOrEmpty(this.textBox1.Text))
            {
                this.textBox1.BackColor = Constants.RED;
                System.Threading.Thread t = new System.Threading.Thread(() => {
                    System.Threading.Thread.Sleep(3000);
                    this.textBox1.Invoke(new Action(() => {
                        this.BackColor = Color.White;
                    }));
                });
                t.Start();
                return;
            }
            List <int> checkedNodes = new List <int>();

            checkedNodes.Add((int)Form1.Instance.user?.UserId);
            foreach (object t in this.listBox1.SelectedItems)
            {
                checkedNodes.Add((int)((User)((listItem)t).o).UserId);
            }
            switch (this.comboBox1.SelectedIndex)
            {
            case 0:
                PrivateDiscussion d = new PrivateDiscussion();
                d.Type        = PrivateDiscussion.Types.private_channel;
                d.Title       = this.textBox1.Text;
                d.Description = this.textBox2.Text;
                d.Members     = checkedNodes.ToArray();
                Form1.Instance.session.REST.PostPrivateDiscussion(d);
                break;

            case 1:
                Channel c = new Channel();
                c.Title       = this.textBox1.Text;
                c.Members     = checkedNodes.ToArray();
                c.Type        = Channel.Types.public_channel;
                c.Description = this.textBox2.Text;
                Form1.Instance.session.REST.PostChannel(c);
                break;
            }

            MessageBox.Show("Discussion created successfully.");
            this.Close();
        }
예제 #4
0
파일: Parser.cs 프로젝트: xSash/spherechat
 public static dynamic EntitytoJSON(dynamic entity, Type type)
 {
     if (type == typeof(Channel))
     {
         Channel channel = (Channel)entity;
         return(new {
             id = channel.ThreadId,
             slug = channel.Slug,
             title = channel.Title,
             type = EnumToString(channel.Type, typeof(Channel.Types)),
             description = channel.Description,
             membership = EntitytoJSON(channel.Membership, typeof(Membership)),
             memberships = EntitytoJSON(channel.Memberships ?? new Membership[] { }, typeof(Membership[])),
             manager_user = channel.ManagerUser,
             manager_details = EntitytoJSON(channel.ManagerDetails, typeof(User)),
             members = channel.Members
         });
     }
     else if (type == typeof(Channel[]))
     {
         List <dynamic> channels = new List <dynamic>();
         foreach (var channel in (entity as Channel[]))
         {
             channels.Add(EntitytoJSON(channel, typeof(Channel)));
         }
         return(channels.ToArray());
     }
     else if (type == typeof(FriendRequest))
     {
         FriendRequest friendrequest = (FriendRequest)entity;
         return(new {
             requester = friendrequest.Requester,
             addresser = friendrequest.Addresser,
             friend_detail = EntitytoJSON(friendrequest.FriendDetails, typeof(User)),
             request_date = friendrequest.RequestDate.ToUniversalTime(),
             approval_date = friendrequest.ApprovalDate.ToUniversalTime(),
             friendship_end_date = friendrequest.FriendshipEndDate.ToUniversalTime(),
             active = friendrequest.Active
         });
     }
     else if (type == typeof(FriendRequest[]))
     {
         List <dynamic> friendrequests = new List <dynamic>();
         foreach (var friendrequest in (entity as FriendRequest[]))
         {
             friendrequests.Add(EntitytoJSON(friendrequest, typeof(FriendRequest)));
         }
         return(friendrequests);
     }
     else if (type == typeof(Entities.Friendship))
     {
         Entities.Friendship friendship = (Entities.Friendship)entity;
         return(new {
             id = friendship.FriendshipId,
             requester_user = friendship.Requester,
             addresser_user = friendship.Addresser,
             request_date = friendship.RequestDate.ToUniversalTime(),
             approval_date = friendship.ApprovalDate.ToUniversalTime(),
             friendship_end_date = friendship.FriendshipEndDate.ToUniversalTime(),
             active = friendship.Active
         });
     }
     else if (type == typeof(Entities.Friendship[]))
     {
         List <dynamic> friendships = new List <dynamic>();
         foreach (var friendship in (entity as Entities.Friendship[]))
         {
             friendships.Add(EntitytoJSON(friendship, typeof(Entities.Friendship)));
         }
         return(friendships.ToArray());
     }
     else if (type == typeof(Membership))
     {
         Membership membership = (Membership)entity;
         return(new {
             id = membership.MembershipId,
             thread = membership.ThreadId,
             user = membership.UserId,
             last_seen_date = membership.LastSeenDate.ToUniversalTime(),
             last_seen_message = membership.LastSeenMessageId,
             active = membership.IsParticipant,
             join_date = membership.JoinDate.ToUniversalTime(),
             user_details = EntitytoJSON(membership.UserDetails, typeof(User)),
             unchecked_count = membership.UncheckedCount
         });
     }
     else if (type == typeof(Membership[]))
     {
         List <dynamic> memberships = new List <dynamic>();
         foreach (var membership in (entity as Membership[]))
         {
             memberships.Add(EntitytoJSON(membership, typeof(Membership)));
         }
         return(memberships.ToArray());
     }
     else if (type == typeof(Message))
     {
         Message message = (Message)entity;
         return(new {
             id = message.MessageId,
             thread = message.ThreadId,
             user_sender = message.UserId,
             contents = message.Contents,
             sent_date = message.SentDate.ToUniversalTime(),
             type = EnumToString(message.Type, typeof(Message.Types)),
             tags = EntitytoJSON(message.Tags ?? new MessageTag[] { }, typeof(MessageTag[]))
         });
     }
     else if (type == typeof(Message[]))
     {
         List <dynamic> messages = new List <dynamic>();
         foreach (var message in (entity as Message[]))
         {
             messages.Add(JSONtoEntity(message, typeof(Message)));
         }
         return(messages.ToArray());
     }
     else if (type == typeof(MessageTag))
     {
         MessageTag tag = (MessageTag)entity;
         return(new {
             tagger_user = tag.TaggedUserId,
             message = tag.MessageId,
             placeholder_position = tag.PlaceholderPosition,
             tagged_user_details = EntitytoJSON(tag.TaggedUserDetails, typeof(User))
         });
     }
     else if (type == typeof(MessageTag[]))
     {
         List <dynamic> messagetags = new List <dynamic>();
         foreach (var messagetag in (entity as MessageTag[]))
         {
             messagetags.Add(JSONtoEntity(messagetag, typeof(MessageTag)));
         }
         return(messagetags.ToArray());
     }
     else if (type == typeof(PrivateDiscussion))
     {
         PrivateDiscussion privatediscussion = (PrivateDiscussion)entity;
         return(new {
             id = privatediscussion.ThreadId,
             slug = privatediscussion.Slug,
             title = privatediscussion.Title,
             type = EnumToString(privatediscussion.Type, typeof(PrivateDiscussion.Types)),
             description = privatediscussion.Description,
             creator_user = privatediscussion.CreatorUser,
             manager_user = privatediscussion.ManagerUser,
             manager_details = EntitytoJSON(privatediscussion.ManagerDetails, typeof(User)),
             membership = EntitytoJSON(privatediscussion.Membership, typeof(Membership)),
             memberships = EntitytoJSON(privatediscussion.Memberships, typeof(Membership[])),
             interlocutor_membership = EntitytoJSON(privatediscussion.InterlocutorMembership, typeof(Membership))
         });
     }
     else if (type == typeof(PrivateDiscussion[]))
     {
         List <dynamic> privatediscussions = new List <dynamic>();
         foreach (var privatediscussion in (entity as PrivateDiscussion[]))
         {
             privatediscussions.Add(EntitytoJSON(privatediscussion, typeof(PrivateDiscussion)));
         }
         return(privatediscussions.ToArray());
     }
     else if (type == typeof(Thread))
     {
         Thread thread = (Thread)entity;
         return(new {
             id = thread.ThreadId,
             slug = thread.Slug,
             title = thread.Title,
             type = EnumToString(thread.Type, typeof(Thread.Types)),
             description = thread.Description,
             creator_user = thread.CreatorUser,
             manager_user = thread.ManagerUser,
             manager_details = EntitytoJSON(thread.ManagerDetails, typeof(User)),
             membership = EntitytoJSON(thread.Membership, typeof(Membership)),
             memberships = EntitytoJSON(thread.Memberships, typeof(Membership[]))
         });
     }
     else if (type == typeof(Thread[]))
     {
         List <dynamic> threads = new List <dynamic>();
         foreach (var thread in (entity as Thread[]))
         {
             threads.Add(EntitytoJSON(thread, typeof(PrivateDiscussion)));
         }
         return(threads.ToArray());
     }
     else if (type == typeof(User))
     {
         User user = (User)entity;
         return(new {
             id = user.UserId,
             username = user.Username,
             first_name = user.FirstName,
             last_name = user.LastName,
             type = EnumToString(user.Type, typeof(User.Types)),
         });
     }
     else if (type == typeof(User[]))
     {
         List <dynamic> users = new List <dynamic>();
         foreach (var user in (entity as User[]))
         {
             users.Add(EntitytoJSON(user, typeof(User)));
         }
         return(users.ToArray());
     }
     else
     {
         throw new Exception("Unhandled Type " + type.ToString());
     }
 }
예제 #5
0
        /// <summary>
        /// Évènement déclenché lors de la réception de données du serveur
        /// </summary>
        /// <param name="data">Données venant du serveur</param>
        private void Conn_OnReceive(string data)
        {
            string  command = data.Split(':')[0];
            dynamic json    = JSON.Parse(data.Substring(data.IndexOf(':') + 1));

            Console.WriteLine(data);
            switch ((string)json.type.ToString())
            {
            case "authenticate":
                if (json.success == true)
                {
                    Send("!subscribe:messaging,users." + session.GetProfile().UserId);

                    foreach (var c in session.GetAllChannels())
                    {
                        Send("!subscribe:messaging,threads." + c.ThreadId);
                        subscriptions.Add(c.ThreadId, c);
                    }

                    foreach (var p in session.GetAllPrivateDiscussions())
                    {
                        Send("!subscribe:messaging,threads." + p.ThreadId);
                        subscriptions.Add(p.ThreadId, p);
                    }


                    Console.WriteLine("Authenticated !");
                }
                else
                {
                    Console.WriteLine("Oops.. check your credentitals..");
                }
                break;

            case "subscribe":
                if (json.success == true)
                {
                    Console.WriteLine("Subscribed to " + json.payload.channel);
                }
                else
                {
                    Console.WriteLine("Unable to subscribe to " + json.payload.channel);
                    subscriptions.Remove(Convert.ToInt32(((string)json.payload.channel).Split('.')[1]));
                }
                break;

            case "discussion_change":
                PrivateDiscussion discussion = Parser.JSONtoEntity(json.payload, typeof(PrivateDiscussion));
                if (!subscriptions.ContainsKey(discussion.ThreadId))
                {
                    subscriptions.Add(discussion.ThreadId, discussion);
                    Send("!subscribe:messaging,threads." + discussion.ThreadId);
                }

                OnDiscussionChange?.Invoke(Parser.JSONtoEntity(json.payload, typeof(PrivateDiscussion)));
                break;

            case "channel_change":
                Channel channel = Parser.JSONtoEntity(json.payload, typeof(Channel));
                if (!subscriptions.ContainsKey(channel.ThreadId))
                {
                    subscriptions.Add(channel.ThreadId, channel);
                    Send("!subscribe:messaging,threads." + channel.ThreadId);
                }

                OnChannelChange?.Invoke(channel);
                break;

            case "new_friend_request":
                OnNewFriendshipRequest?.Invoke(Parser.JSONtoEntity(json.payload, typeof(FriendRequest)));
                break;

            case "friendship_addressed":
                OnFriendshipAdressed?.Invoke(Parser.JSONtoEntity(json.payload, typeof(Friendship)));
                break;

            case "message":
                OnMessageReceived?.Invoke(Parser.JSONtoEntity(json.payload, typeof(Message)));
                break;

            default:
                Console.WriteLine("Unhandled event " + json.type);
                break;
            }
        }