コード例 #1
0
ファイル: RemotingServer.cs プロジェクト: Yo56/RemoteEvents
        //call event listeners when A new chat request is created
        private void safeInvokeNewChatRequest(string senderNickname, string receiverNickname)
        {
            if (!serverActive)
            {
                return;
            }

            if (NewChatRequest == null)
            {
                return;         //No Listeners
            }
            NewChatRequestEvent listener = null;

            Delegate[] dels = NewChatRequest.GetInvocationList();

            foreach (Delegate del in dels)
            {
                try
                {
                    listener = (NewChatRequestEvent)del;
                    listener.Invoke(senderNickname, receiverNickname);
                }
                catch (Exception ex)
                {
                    //Could not reach the destination, so remove it
                    //from the list
                    NewChatRequest -= listener;
                }
            }
        }
コード例 #2
0
 private void Button_Clicked(object sender, EventArgs e)
 {
     if (usernameEntry.Text.Trim().Length > 0)
     {
         var usr = usernameEntry.Text.Trim();
         Navigation.PopModalAsync(animated: true);
         Task.Run(() => {
             var req = new NewChatRequest(myUsername, usr.ToUsername(), sessionID);
             writer.Write(req);
         });
     }
 }
コード例 #3
0
ファイル: ChatServer.cs プロジェクト: marnagy/ChatApp
            private void HandleLoggedInRequests()
            {
                while (loggedIn)
                {
                    req = (Request)br.Read();
                    if (req.SessionID != sessionID)
                    {
                        return;
                    }

                    switch (req.Type)
                    {
                    case RequestType.NewChat:
                        NewChatRequest NCReq = (NewChatRequest)req;
                        (success, info, reason) = server.database.CreateChat(NCReq.participants);

                        if (success)
                        {
                            foreach (Username user in info.participants)
                            {
                                if (server.writersPerUsername.TryGetValue(user, out var writer))
                                {
                                    writer.Write(new ChatCreatedResponse(info, sessionID));
                                }
                            }
                        }
                        else
                        {
                            resp = new FailResponse(reason, sessionID);
                        }
                        info   = null;
                        reason = null;
                        break;

                    case RequestType.NewMessage:
                        NewMessageRequest NMReq = (NewMessageRequest)req;
                        (success, users, msg, reason) = server.database.AddMessage(NMReq.chatType, NMReq.chatID, NMReq.message);

                        // (future) confirm receiving the message

                        foreach (Username user in users)
                        {
                            server.writersPerUsername.TryGetValue(user, out var writer);
                            if (writer != null)
                            {
                                writer.Write(new AddMessageResponse(NMReq.chatType, NMReq.chatID, msg, sessionID));
                            }
                        }

                        msg    = null;
                        users  = null;
                        reason = null;
                        break;

                    case RequestType.DeleteMessage:
                        DeleteMessageRequest DMReq = (DeleteMessageRequest)req;
                        (success, users, reason) = server.database.DeleteMessage(DMReq.chatType, DMReq.chatID, DMReq.dateTime);

                        if (success)
                        {
                            foreach (var user in users)
                            {
                                if (server.writersPerUsername.TryGetValue(user, out var writer))
                                {
                                    writer.Write(new DeleteMessageResponse(DMReq.chatType, DMReq.chatID, DMReq.dateTime, sessionID));
                                }
                            }
                        }
                        break;

                    case RequestType.GetOnlineContacts:
                        OnlineContactsRequest OCReq = (OnlineContactsRequest)req;
                        (success, users, reason) = server.database.GetOnlineContacts(OCReq.username);

                        if (success)
                        {
                            resp = new OnlineContactsResponse(users, sessionID);
                        }
                        break;

                    case RequestType.ChangePassword:
                        ChangePasswordRequest CPReq = (ChangePasswordRequest)req;
                        (success, reason) = server.database.ChangePassword(CPReq.username, CPReq.oldPassword, CPReq.newPassword);

                        if (success)
                        {
                            resp = new SuccessResponse(sessionID);
                        }
                        else
                        {
                            resp = new FailResponse(reason, sessionID);
                        }
                        break;

                    default:
                        resp = new FailResponse("Unsupported request type detected.", sessionID);
                        break;
                    }

                    req = null;

                    if (resp != null)
                    {
                        bw.Write(resp);
                        //resp.Send(bw);

                        resp = null;
                        if (!loggedIn)
                        {
                            return;
                        }
                    }
                }
            }