Exemple #1
0
        private DoctorTask GetDoctorFromClient()
        {
            Console.WriteLine("Locked");
            foreach (DoctorData currentDoctor in serverData.Doctors)
            {
                foreach (string currentClient in currentDoctor.ClientIds)
                {
                    if (currentClient == currentUser.Id) // De id van de client moet al bekend zijn door het eerste bericht
                    {
                        TcpTask doc = null;
                        lock (TypeCheckTask.OnlineListSyncRoot)
                        {
                            try { doc = connnectedTasks.Find(x => x.UserData.Id == currentDoctor.Id); }// Werkt dit?
                            catch (NullReferenceException e) { e.ToString(); }

                            if (doc != null)
                            {
                                return((DoctorTask)doc);
                            }
                            else
                            {
                                return(null);
                            }
                        }
                    }
                }
            }
            Console.WriteLine("Unlocked");
            return(null);
        }
Exemple #2
0
        public void OnAuthorizeConnection(Datagram received)
        {
            TcpTask currentTask = null;

            if (received.DataType == DataType.Login)
            {
                var loginRequest = TcpHelper.ToConcreteType <JsonLogin>(received.Data);
                if (loginRequest.IsDoctorProgram)
                {
                    DoctorData currentUser = FindDoctorWithPassword(loginRequest.Id, loginRequest.Password);
                    if (currentUser != null)
                    {
                        DoctorTask doctorTask = new DoctorTask(client, serverData, currentUser, currentTasks);
                        currentTask = doctorTask;
                        lock (OnlineListSyncRoot)
                        {
                            currentTasks.Add(doctorTask);
                        }
                    }
                }
                else
                {
                    //moet voor client lists in server data want we voegen data toe maar lezen ook.
                    serverData.ClientListLock.EnterReadLock();
                    PatientData currentUser = FindClientWithPassword(loginRequest.Id, loginRequest.Password);
                    serverData.ClientListLock.ExitReadLock();
                    if (currentUser != null)
                    {
                        // ZORGT VOOR DEADLOCK!!!
                        PatientTask clientTask = new PatientTask(client, serverData, currentUser, currentTasks);
                        currentTask = clientTask;
                        lock (OnlineListSyncRoot)
                        {
                            currentTasks.Add(clientTask);
                        }
                    }
                }
            }

            //TcpHelper writerHelper = new TcpHelper(client);
            //dynamic response = new ExpandoObject();
            //response.DataType = DataType.Login;
            //response.Data = new ExpandoObject();

            TcpHelper writerHelper = new TcpHelper(client);
            var       response     = new Datagram();

            response.DataType = DataType.Login;
            if (currentTask != null)
            {
                response.Data = new JsonResponse
                {
                    Error   = "200",
                    Message = "LoginOK"
                };
                writerHelper.WriteJsonData(response);
                currentTask.Run();
            }
            else
            {
                response.Data = new JsonResponse
                {
                    Error   = "500",
                    Message = "LoginWrong"
                };
                writerHelper.WriteJsonData(response);
                //lets try that again
                TcpHelper helper = new TcpHelper(client);
                helper.ReadJsonData(OnAuthorizeConnection);
            }
        }