//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; } } }
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); }); } }
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; } } } }