public void ReceiveJoin(string username, MeetingProposal proposal, MeetingRecord record, VectorClock newVector) { while (_isFrozen) { } Thread.Sleep(RandomIncomingMessageDelay()); updateVectorClock(proposal, newVector); Console.WriteLine("received join {0}", proposal.Topic); MeetingProposal previousProposal; if (_currentMeetingProposals.TryGetValue(proposal.Topic, out previousProposal)) { if (!previousProposal.Records.Contains(record)) //stop condition request already received { Join(username, proposal.Topic, record, local: false); } } else { _currentMeetingProposals.TryAdd(proposal.Topic, proposal); } }
/// <summary> /// 实体转换 /// </summary> /// <param name="meeting"></param> /// <param name="model"></param> private void GetMeetingRecordModel(mMeeting meeting, MeetingRecord model) { string[] array = GetstringSpilit(meeting.MeetingName); if (array.Length > 0) { model.Year = GetStringToNum(array[0]); model.Num = GetStringToNum(array[2]); model.TotalNum = GetStringToNum(array[4]); } model.MeetingId = meeting.MeetingId; model.StartDate = Convert.ToDateTime(meeting.StartDate).ToString("yyyy-MM-dd HH:mm"); model.EendDate = Convert.ToDateTime(meeting.EendDate).ToString("yyyy-MM-dd HH:mm"); model.MeetingAddress = meeting.AddressName; model.MeetingHost = Convert.ToInt32(meeting.MeetingHost); model.MeetingSecretary = meeting.MeetingSecretary; model.MeetingDocument = Convert.ToInt32(meeting.MeetingDocument); model.DepartId = meeting.DepartId; model.IssueName = meeting.IssueName; model.RepostUser = meeting.RepostUser; model.MeetingName = meeting.MeetingName; model.MeetingHostName = meeting.MeetingHostName; model.MeetingDocumentName = meeting.MeetingDocumentName; model.MeetingSecretaryName = meeting.MeetingSecretaryName; model.RepostUserName = meeting.RepostUserName; //model.DepartName = meeting.DepartName; model.DepartName = meeting.newDepartName; }
public void RemoteJoin(string meetingTopic, MeetingRecord record) { try { Task task = Task.Run(() => { _remoteServer.Join(USERNAME, meetingTopic, record); }); task.Wait(TimeSpan.FromMilliseconds(TIMEOUT)); if (task.IsCompleted == false) { throw new TimeoutException("Timeout in remoteJoin"); } } catch (AggregateException e) { DetectDeadServer(); SwitchServer(); RemoteJoin(meetingTopic, record); } catch (TimeoutException e) { DetectDeadServer(); SwitchServer(); RemoteJoin(meetingTopic, record); } }
private void DateClicked(object sender, EventArgs e) { var pressedButton = (Button)sender; pressedButton.Style = orangeButton; if (lastClickedButton != null) { lastClickedButton.Style = plainButton; lastClickedButton.BorderColor = Color.White; } label.Text = new DateTime(initialDate.Year, initialDate.Month, int.Parse((pressedButton).Text)).ToString(); var records = new List <MeetingRecord>(); var record1 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 9, 0, 0), End = new DateTime(2020, 3, 14, 10, 30, 0) }; var record2 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 10, 30, 0), End = new DateTime(2020, 3, 14, 12, 0, 0) }; var record3 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 12, 0, 0), End = new DateTime(2020, 3, 14, 13, 30, 0) }; var record4 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 14, 30, 0), End = new DateTime(2020, 3, 14, 16, 0, 0) }; var record5 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 16, 0, 0), End = new DateTime(2020, 3, 14, 17, 30, 0) }; var record6 = new MeetingRecord() { Begin = new DateTime(2020, 3, 14, 17, 30, 0), End = new DateTime(2020, 3, 14, 19, 0, 0) }; records.Add(record1); records.Add(record2); records.Add(record3); records.Add(record4); records.Add(record5); records.Add(record6); listView.ItemsSource = records; pressedButton.BorderColor = Color.Red; lastClickedButton = pressedButton; }
//BROADCAST JOIN public void BroadcastJoin(string username, MeetingProposal proposal, MeetingRecord record) { AckController ackController = new AckController(); foreach (KeyValuePair <string, IServer> server in _servers) { if (_serversStatus[server.Key] == false) { _broadcastJoinDelegate.BeginInvoke(ackController, server.Value, server.Key, username, proposal, record, BroadcastJoinCallback, server.Key); } } WaitForMaxFault(ackController); }
public void updateLog(String meetingTopic, MeetingRecord record = null, String username = null) { VectorClock copy = new VectorClock(_meetingsClocks[meetingTopic]._currentVectorClock); if (record == null) { // we register a new close operation _operationsLog[meetingTopic].Add(new CloseOperation(copy, _currentMeetingProposals[meetingTopic])); } else { // meeting record will now have a VectorClock associated for posterior sorting record._vector = copy; // we register a new join operation _operationsLog[meetingTopic].Add(new JoinOperation(copy, record, username)); } }
public void Join(string meetingTopic, List <string> slots) { int timeb = DateTime.Now.Millisecond; if (_knownMeetingProposals.ContainsKey(meetingTopic)) { List <DateLocation> parsedSlots = ParseSlots(slots); MeetingRecord record = new MeetingRecord { Name = USERNAME, DateLocationSlots = parsedSlots, }; RemoteJoin(meetingTopic, record); } int timea = DateTime.Now.Millisecond; Console.WriteLine("time passed " + (timea - timeb)); }
public string BroadcastJoinToServer(AckController ackController, IServer server, string url, string username, MeetingProposal proposal, MeetingRecord record) { Console.WriteLine("going to send join {0}", proposal.Topic); server.ReceiveJoin(username, proposal, record, _meetingsClocks[proposal.Topic]); ackController.N_acks++; return(url); }
public void Join(string username, string topic, MeetingRecord record, string urlFailed = null, bool local = true) { while (_isFrozen) { } Thread.Sleep(RandomIncomingMessageDelay()); MeetingProposal proposal; if (!_currentMeetingProposals.TryGetValue(topic, out proposal)) { // if the server does not have a meeting, he tells the client to switch to a different server _clients[username].SwitchServer(); } else { if (!proposal.Records.Contains(record)) { // Checks if the join arrived after the meeting is closed, in that // case it maintains a record with a special status, FAILED if (proposal.MeetingStatus.Equals(MeetingStatus.CLOSED) || proposal.MeetingStatus.Equals(MeetingStatus.CANCELLED)) { if (!proposal.FailedRecords.Contains(record)) { proposal.AddFailedRecord(record); // we update the respective vector clock if (local) { incrementVectorClock(topic); } // we update the respective log updateLog(topic, record, username); BroadcastJoin(username, proposal, record); } } else { //increments the number of invitees that can go to that slot foreach (DateLocation date1 in proposal.DateLocationSlots) { foreach (DateLocation date2 in record.DateLocationSlots) { if (date1.Equals(date2)) { date1.Invitees++; } } } proposal.AddMeetingRecord(record); // we update the respective vector clock if (local) { incrementVectorClock(topic); } // we update the respective log updateLog(topic, record, username); BroadcastJoin(username, proposal, record); } Console.WriteLine(record.Name + " joined meeting proposal " + proposal.Topic + "."); } } }
public MeetingRecord GetMeetingRecord(DataSet dataSet) { MeetingRecord model = new MeetingRecord(); if (dataSet != null) { if (dataSet.Tables[0] != null && dataSet.Tables[0].Rows.Count > 0) { var meeting = ModelHandler.GetEntity <mMeeting>(dataSet.Tables[0]); GetMeetingRecordModel(meeting, model); } if (dataSet.Tables[1] != null && dataSet.Tables[1].Rows.Count > 0) { foreach (DataRow item in dataSet.Tables[1].Rows) { model.PeopleName = model.PeopleName + item["UserId"].ToString() + ","; model.PeopleNickName = model.PeopleNickName + item["UserName"].ToString() + ","; } model.PeopleName = model.PeopleName.Substring(0, model.PeopleName.Length - 1); model.PeopleNickName = model.PeopleNickName.Substring(0, model.PeopleNickName.Length - 1); } if (dataSet.Tables[2] != null && dataSet.Tables[2].Rows.Count > 0) { foreach (DataRow item in dataSet.Tables[2].Rows) { if (item["UserType"].ToString() == "2") { model.AttendPeople = model.AttendPeople + item["UserId"].ToString() + ","; model.AttendNickName = model.AttendNickName + item["UserName"].ToString() + ","; } else if (item["UserType"].ToString() == "1") { model.LeavePeople = model.LeavePeople + item["UserId"].ToString() + ","; model.LeaveNickName = model.LeaveNickName + item["UserName"].ToString() + ","; } } if (!string.IsNullOrEmpty(model.AttendPeople) && model.AttendPeople.Length > 0) { model.AttendPeople = model.AttendPeople.Substring(0, model.AttendPeople.Length - 1); model.AttendNickName = model.AttendNickName.Substring(0, model.AttendNickName.Length - 1); } if (!string.IsNullOrEmpty(model.LeavePeople) && model.LeaveNickName.Length > 0) { model.LeaveNickName = model.LeaveNickName.Substring(0, model.LeaveNickName.Length - 1); model.LeavePeople = model.LeavePeople.Substring(0, model.LeavePeople.Length - 1); } } if (dataSet.Tables[3] != null && dataSet.Tables[3].Rows.Count > 0) { model.MeetingOpinion = ModelHandler.GetEntities <mMeetingOpinion>(dataSet.Tables[3]); } if (dataSet.Tables[4] != null && dataSet.Tables[4].Rows.Count > 0) { model.MeetingRecordInfo = ModelHandler.GetEntity <MeetingRecordInfo>(dataSet.Tables[4]); } } return(model); }
public void Put([FromBody] MeetingRecord value) { _meetingRecordRepository.Create(value); }