Exemple #1
0
        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);
            }
        }
Exemple #2
0
        /// <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;
        }
Exemple #3
0
 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);
     }
 }
Exemple #4
0
        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;
        }
Exemple #5
0
        //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);
        }
Exemple #6
0
        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));
            }
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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 + ".");
                }
            }
        }
Exemple #10
0
        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);
 }