コード例 #1
0
 private void ConversationWindow_Load(object sender, System.EventArgs e)
 {
     for (int i = 0; i < otherUsernames.Count; i++)
     {
         IClientObj newClient = (IClientObj)RemotingServices.Connect(typeof(IClientObj), otherUsersAddresses[i]);
         newClient.SetupConnection();
         otherClients.Add(otherUsernames[i], newClient);
     }
 }
コード例 #2
0
ファイル: ChatServer.cs プロジェクト: Batosta/FEUP-TDIN
    public void YesToProposal(string proposalSenderUsername, string proposalReceiverUsername)
    {
        Console.WriteLine("Yes received from " + proposalReceiverUsername);
        List <string> usernames             = new List <string>();
        List <string> addresses             = new List <string>();
        string        proposalSenderAddress = GetUserAddress(proposalSenderUsername);

        usernames.Add(proposalSenderUsername);
        addresses.Add(proposalSenderAddress);
        conversationProposals[proposalSenderUsername][proposalReceiverUsername] = true;

        foreach (KeyValuePair <string, bool> entry in conversationProposals[proposalSenderUsername])
        {
            if (entry.Value == false)
            {
                return;
            }
            usernames.Add(entry.Key);
            addresses.Add(GetUserAddress(entry.Key));
        }
        Console.WriteLine("All users accepted " + proposalSenderUsername + "'s proposal.");
        // If reaches this code, all receivers have already accepted the conversation
        IClientObj clientObjSender = (IClientObj)RemotingServices.Connect(typeof(IClientObj), (string)proposalSenderAddress);

        List <MessageModel> previousMessages = new List <MessageModel>();
        string    chatName     = GetChatNameWithUsernames(usernames);
        ChatModel existentChat = SearchForChat(chatName);

        if (existentChat == null)
        {
            CreateChatInDB(chatName, usernames);
            previousMessages = null;
        }
        else
        {
            previousMessages = existentChat.Messages;
        }

        foreach (KeyValuePair <string, bool> entry in conversationProposals[proposalSenderUsername])
        {
            string proposalReceiverAddress = GetUserAddress(entry.Key);
            new Thread(() => {
                IClientObj clientObjReceiver = (IClientObj)RemotingServices.Connect(typeof(IClientObj), (string)proposalReceiverAddress);
                Console.WriteLine("Telling " + entry.Key + " to start chat.");
                clientObjReceiver.StartChat(chatName, usernames, addresses, previousMessages);
            }).Start();
        }
        new Thread(() => {
            Console.WriteLine("Telling " + proposalSenderUsername + " to start chat.");
            clientObjSender.StartChat(chatName, usernames, addresses, previousMessages);
        }).Start();
    }
コード例 #3
0
ファイル: ChatServer.cs プロジェクト: Batosta/FEUP-TDIN
    /*
     * Conversation Initiation methods
     */
    public void SendConversationProposal(string proposalSenderUsername, List <string> proposalReceiverUsernames)
    {
        Dictionary <string, bool> usersToAcceptProposal = new Dictionary <string, bool>();

        foreach (string proposalReceiverUsername in proposalReceiverUsernames)
        {
            usersToAcceptProposal[proposalReceiverUsername] = false;
            string     proposalReceiverAddress = GetUserAddress(proposalReceiverUsername);
            IClientObj clientObjReceiver       = (IClientObj)RemotingServices.Connect(typeof(IClientObj), (string)proposalReceiverAddress);

            new Thread(() =>
            {
                clientObjReceiver.ReceiveProposal(proposalSenderUsername, proposalReceiverUsernames);
            }).Start();
        }
        conversationProposals[proposalSenderUsername] = usersToAcceptProposal;
    }