Beispiel #1
0
        private string Authorize(SocketNode node)
        {
            string response    = "";
            User   requestUser = JsonSerializer.Deserialize <User>(node.User);

            if (requestUser != null)
            {
                User user = dataService.GetUser(requestUser.Login, requestUser.Password);
                if (user == null)
                {
                    user = new User();
                }
                else
                {
                    foreach (var el in user.Role_User_Mappings)
                    {
                        el.User = null;
                        el.Role.Role_User_Mappings = null;
                    }
                }
                response = JsonSerializer.Serialize <User>(user);
            }

            return(response);
        }
 private bool alreadyFriend(string friend, SocketNode user) // check if already friend two users are
 {
     for (int i = 0; i < user.friends.Count(); i++)
     {
         if (user.friends[i] == friend)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #3
0
 private string DeleteWard(SocketNode socketNode)
 {
     try
     {
         int id = JsonSerializer.Deserialize <int>(socketNode.Args);
         dataService.DeleteWard(id);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #4
0
 private string CloseAdmission(SocketNode socketNode)
 {
     try
     {
         Admission admission = JsonSerializer.Deserialize <Admission>(socketNode.Args);
         dataService.CloseAdmission(admission.Id, admission.DischargeDate.Value);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #5
0
 private string MoveMedicinesToAdmission(SocketNode socketNode)
 {
     try
     {
         Admission admission = JsonSerializer.Deserialize <Admission>(socketNode.Args);
         dataService.InsertMedicineToAdmission(admission.Id, admission.Medisines.Select(el => el.Id).ToList());
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #6
0
 private string AddAdmission(SocketNode socketNode)
 {
     try
     {
         Admission admission = JsonSerializer.Deserialize <Admission>(socketNode.Args);
         dataService.InsertAdmission(admission);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #7
0
 private string AddMedicine(SocketNode socketNode)
 {
     try
     {
         Medicine medicine = JsonSerializer.Deserialize <Medicine>(socketNode.Args);
         dataService.InsertMedicine(medicine);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #8
0
 private string AddWard(SocketNode socketNode)
 {
     try
     {
         Ward ward = JsonSerializer.Deserialize <Ward>(socketNode.Args);
         dataService.InsertWard(ward);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #9
0
 private string AddUser(SocketNode socketNode)
 {
     try
     {
         User user = JsonSerializer.Deserialize <User>(socketNode.Args);
         dataService.InsertUser(user);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #10
0
 private string AddDoctor(SocketNode socketNode)
 {
     try
     {
         var requestDoctor = JsonSerializer.Deserialize <Doctor>(socketNode.Args);
         dataService.InsertDoctor(requestDoctor);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
Beispiel #11
0
 private string AddPatient(SocketNode socketNode)
 {
     try
     {
         var requestPatient = JsonSerializer.Deserialize <Patient>(socketNode.Args);
         dataService.InsertPatient(requestPatient);
         return("200");
     }
     catch (Exception ex)
     {
         return("500;" + ex.Message);
     }
 }
        private void checkPendingNotif(SocketNode user) // Handle notifications through the server
        {
            for (int i = 0; i < pendingNotifId; i++)
            {
                if (pendingNotifications[i] != "")
                {
                    string   sentMessage = "";
                    string   sender      = "";
                    string   receiver    = "";
                    string[] allMessages;
                    string[] users;

                    allMessages = pendingNotifications[i].Split('#');
                    sentMessage = allMessages[1];
                    if (allMessages[0].Contains('%'))
                    {
                        users    = allMessages[0].Split('%');
                        sender   = users[0];
                        receiver = users[1];
                    }
                    else
                    {
                        sender = allMessages[0];
                    }

                    if (receiver == user.name)
                    {
                        SendMessage(user.socket, pendingNotifications[i]);
                        if (sentMessage == "(accepted)")
                        {
                            deletePendingNotif(pendingNotifications[i]);
                        }
                        if (sentMessage == "(declined)")
                        {
                            deletePendingNotif(pendingNotifications[i]);
                        }
                        if (sentMessage == "(removed)")
                        {
                            deletePendingNotif(pendingNotifications[i]);
                        }
                        if (sentMessage.Contains('='))
                        {
                            deletePendingNotif(pendingNotifications[i]);
                        }
                    }
                }
            }
        }
Beispiel #13
0
        public void InitializeFlow()
        {
            server = ServerFactory.NewInstance(ServerInfo.GetPort());
            server.SetRootPath(ServerInfo.GetWebRoot());
            server.Set("/ControllView", (req, res) =>
            {
                res.SetHeader("Content-Type", "text/html; charset=utf-8");
                res.ReadFile(ServerInfo.GetWebRoot() + "\\index.html");
            });
            server.Set("/Jquery", (req, res) =>
            {
                res.SetHeader("Content-Type", "text/javascript; charset=UTF-8");
                res.ReadFile(ServerInfo.GetWebRoot() + "\\jquery-3.2.1.min.js");
            });
            server.Set("/Css", (req, res) =>
            {
                res.SetHeader("Content-Type", "text/css;");
                res.ReadFile(ServerInfo.GetWebRoot() + "\\common.css");
            });
            server.Set("/Javascript", (req, res) =>
            {
                res.SetHeader("Content-Type", "text/css;");
                res.ReadFile(ServerInfo.GetWebRoot() + "\\common.js");
            });
            server.Set("/Ping", (req, res) =>
            {
                if (req.QueryString.ContainsKey("Code"))
                {
                    String code = req.QueryString["Code"].ToString();
                    if (scraperlist.ContainsKey(code))
                    {
                        scraperlist[code].Parameter.Pingtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                        server.SendWebSocket(new WebSocketNode()
                        {
                            OPCode    = Opcode.MESSAGE,
                            Broadcast = true,
                            Message   = JsonConvert.SerializeObject(new SocketNode()
                            {
                                key = "ping", data = JsonConvert.SerializeObject(scraperlist[code].Parameter)
                            })
                        });
                    }
                }
            });
            server.Set("/Scrap", (req, res) =>
            {
                if (!req.QueryString.ContainsKey("Code"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                if (!req.QueryString.ContainsKey("Id"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                if (!req.QueryString.ContainsKey("Pw"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                String param = "Code=" + req.QueryString["Code"].ToString() + "&Id=" + req.QueryString["Id"].ToString() + "&Pw=" + req.QueryString["Pw"].ToString();
                this.logger.Info("Start scraper param : " + param);
                Scraper scraper = new Scraper(param);
                String key      = scraper.Run();
                scraperlist.Add(key, scraper);
                server.SendWebSocket(new WebSocketNode()
                {
                    OPCode    = Opcode.MESSAGE,
                    Broadcast = true,
                    Message   = JsonConvert.SerializeObject(new SocketNode()
                    {
                        key = "insert", data = JsonConvert.SerializeObject(scraper.Parameter)
                    })
                });
                res.StateOK();
            });
            server.Set("/EndScrap", (req, res) =>
            {
                if (!req.QueryString.ContainsKey("Code"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                this.logger.Info("EndScrap");
                String code = req.QueryString["Code"].ToString();
                if (!scraperlist.ContainsKey(code))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                this.logger.Debug("Exit Code = " + code);
                server.SendWebSocket(new WebSocketNode()
                {
                    OPCode    = Opcode.MESSAGE,
                    Broadcast = true,
                    Message   = JsonConvert.SerializeObject(new SocketNode()
                    {
                        key = "remove", data = JsonConvert.SerializeObject(scraperlist[code].Parameter)
                    })
                });
                scraperlist.Remove(code);
                res.StateOK();
                return;
            });
            server.Set("/AbortScrap", (req, res) =>
            {
                if (!req.QueryString.ContainsKey("Code"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                this.logger.Info("EndScrap");
                String code = req.QueryString["Code"].ToString();
                if (!scraperlist.ContainsKey(code))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                this.logger.Debug("Exit Code = " + code);
                scraperlist[code].Kill();
                server.SendWebSocket(new WebSocketNode()
                {
                    OPCode    = Opcode.MESSAGE,
                    Broadcast = true,
                    Message   = JsonConvert.SerializeObject(new SocketNode()
                    {
                        key = "remove", data = JsonConvert.SerializeObject(scraperlist[code].Parameter)
                    })
                });
                scraperlist.Remove(code);
                res.StateOK();
            });
            server.Set("/RestartScrap", (req, res) =>
            {
                if (!req.QueryString.ContainsKey("Code"))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                this.logger.Info("RestartScrap");
                String code = req.QueryString["Code"].ToString();
                if (!scraperlist.ContainsKey(code))
                {
                    res.SetResponseCode(400, "Bad Request");
                    return;
                }
                scraperlist[code].Kill();
                String param      = "Code=" + scraperlist[code].Parameter.Code + "&Id=" + scraperlist[code].Parameter.Id + "&Pw=" + scraperlist[code].Parameter.Pw;
                Scraper scraper   = new Scraper(param);
                scraperlist[code] = scraper;
                scraper.Run(code, false);
                server.SendWebSocket(new WebSocketNode()
                {
                    OPCode    = Opcode.MESSAGE,
                    Broadcast = true,
                    Message   = JsonConvert.SerializeObject(new SocketNode()
                    {
                        key = "restart", data = JsonConvert.SerializeObject(scraperlist[code].Parameter)
                    })
                });
                res.StateOK();
            });

            IDictionary <String, Action <String, WebSocketNode> > socketmethod = new Dictionary <String, Action <String, WebSocketNode> >();

            socketmethod.Add("init", (data, node) =>
            {
                logger.Debug("init");
                //scraperlist;
                List <Object> ret = new List <object>();
                foreach (var s in scraperlist)
                {
                    ret.Add(s.Value.Parameter);
                }
                SocketNode message = new SocketNode()
                {
                    key  = "init",
                    data = JsonConvert.SerializeObject(ret)
                };
                node.OPCode    = Opcode.MESSAGE;
                node.Message   = JsonConvert.SerializeObject(message);
                node.Broadcast = false;
            });
            socketmethod.Add("log", (data, node) =>
            {
                logger.Debug("log");
                node.OPCode = Opcode.MESSAGE;
                logger.Info(data);
            });
            socketmethod.Add("start", (data, node) =>
            {
                StartScraper(data);
            });
            server.SetWebSocket((data, opcode) =>
            {
                WebSocketNode ret = new WebSocketNode()
                {
                    OPCode = Opcode.MESSAGE
                };
                String message = data.ToString();
                try
                {
                    SocketNode node = JsonConvert.DeserializeObject <SocketNode>(message);
                    if (!socketmethod.ContainsKey(node.key))
                    {
                        throw new Exception("not method");
                    }
                    socketmethod[node.key](node.data, ret);
                }
                catch (Exception e)
                {
                    logger.Error(e.ToString());
                    ret.Broadcast = false;
                    ret.Message   = JsonConvert.SerializeObject(new SocketNode()
                    {
                        key = "error"
                    });
                }
                return(ret);
            });
        }
        private void Receive(SocketNode user) // recieve from clients
        {
            int loc = 0;

            for (int i = 0; i < socketLoq; i++) // check for the user
            {
                if (userSockets[i].name == user.name)
                {
                    loc = i;
                }
            }

            if (isConnected(user.name)) // check if the given name is connected
            {
                while (userSockets[loc].connected)
                {
                    try
                    {
                        string   receivedMessages = ReceiveMessage(user.socket);
                        string   sentMessage      = "";
                        string   inviter          = "";
                        string   invitee          = "";
                        string[] allMessages;
                        string[] users;

                        allMessages = receivedMessages.Split('#');
                        sentMessage = allMessages[1];
                        if (allMessages[0].Contains('%'))
                        {
                            users   = allMessages[0].Split('%');
                            inviter = users[0];
                            invitee = users[1];
                        }
                        else
                        {
                            inviter = allMessages[0];
                        }

                        if (sentMessage == "(accepted)") // notify the acceptence
                        {
                            SetText(inviter + " accepted " + invitee + "'s request!");
                            deletePendingNotif(invitee + "%" + inviter + "#" + "(invitation)");
                            bool sent = false;
                            for (int i = 0; i < socketLoq; i++)
                            {
                                if (userSockets[i].name == invitee && sentMessage != "")
                                {
                                    if (userSockets[i].connected)
                                    {
                                        SendMessage(userSockets[i].socket, receivedMessages);
                                        sent = true;
                                    }
                                    else
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent = true;
                                    }
                                    userSockets[i].friends.Add(inviter);
                                    userSockets[loc].friends.Add(invitee);
                                }
                            }
                            if (!sent) // if sent fails
                            {
                                bool memberFound = false;
                                foreach (string member in members)
                                {
                                    if (invitee == member && !memberFound)
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent        = true;
                                        memberFound = true;
                                    }
                                }
                            }
                        }

                        else if (sentMessage == "(declined)") // notify if declined
                        {
                            SetText(inviter + " declined " + invitee + "'s request!");
                            deletePendingNotif(invitee + "%" + inviter + "#" + "(invitation)");
                            bool sent = false;
                            for (int i = 0; i < socketLoq; i++)
                            {
                                if (userSockets[i].name == invitee && sentMessage != "")
                                {
                                    if (userSockets[i].connected)
                                    {
                                        SendMessage(userSockets[i].socket, receivedMessages);
                                        sent = true;
                                    }
                                    else
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent = true;
                                    }
                                }
                            }
                            if (!sent) // if decline notification fails
                            {
                                bool memberFound = false;
                                foreach (string member in members)
                                {
                                    if (invitee == member && !memberFound)
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent        = true;
                                        memberFound = true;
                                    }
                                }
                            }
                        }

                        else if (sentMessage == "(removed)") // notify if removed
                        {
                            SetText(inviter + " removed " + invitee + " from friendlist!");
                            bool sent = false;
                            for (int i = 0; i < socketLoq; i++)
                            {
                                if (userSockets[i].name == invitee && sentMessage != "")
                                {
                                    if (userSockets[i].connected)
                                    {
                                        SendMessage(userSockets[i].socket, receivedMessages);
                                        sent = true;
                                    }
                                    else
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent = true;
                                    }
                                    userSockets[i].friends.Remove(inviter);
                                    userSockets[loc].friends.Remove(invitee);
                                }
                            }
                            if (!sent) // if removed fails
                            {
                                bool memberFound = false;
                                foreach (string member in members)
                                {
                                    if (invitee == member && !memberFound)
                                    {
                                        pendingNotifications[pendingNotifId] = receivedMessages;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                        sent        = true;
                                        memberFound = true;
                                    }
                                }
                            }
                        }

                        else if (sentMessage == "(invitation)")
                        {
                            bool memberFound = false;

                            foreach (string member in members)
                            {
                                if (invitee == member && !memberFound)
                                {
                                    memberFound = true;
                                }
                            }

                            if (alreadyFriend(invitee, userSockets[loc]))
                            {
                                SetText(inviter + "tried to add already existing friend!");
                                SendMessage(user.socket, user.name + "#(alreadyFriend)");
                            }

                            else if (isNotificationExist(invitee + "%" + inviter + "#(invitation)"))
                            {
                                SetText(userSockets[loc].name + " tried to add friend when there is already a pending invite!");
                                SendMessage(userSockets[loc].socket, userSockets[loc].name + "#(alreadyPendingInvitation)");
                            }

                            else if (!isNotificationExist(receivedMessages)) // if havent notified yet
                            {
                                if (memberFound)
                                {
                                    SetText(inviter + " wants to be " + invitee + "'s friend!");
                                    bool sent = false;
                                    for (int i = 0; i < socketLoq; i++)
                                    {
                                        if (userSockets[i].name == invitee && sentMessage != "")
                                        {
                                            SendMessage(userSockets[i].socket, receivedMessages);
                                            sent = true;
                                            pendingNotifications[pendingNotifId] = receivedMessages;
                                            pendingNotifId++;
                                            pendingNotifications[pendingNotifId] = "";
                                        }
                                    }
                                    if (!sent) // if sent fails
                                    {
                                        memberFound = false;
                                        foreach (string member in members)
                                        {
                                            if (invitee == member && !memberFound)
                                            {
                                                pendingNotifications[pendingNotifId] = receivedMessages;
                                                pendingNotifId++;
                                                pendingNotifications[pendingNotifId] = "";
                                                sent        = true;
                                                memberFound = true;
                                            }
                                        }
                                    }
                                }

                                else
                                {
                                    SetText(userSockets[loc].name + " tried to be friend with unknown member!");
                                    SendMessage(userSockets[loc].socket, userSockets[loc].name + "#(unknownInvitation)");
                                }
                            }
                            else
                            {
                                SetText(userSockets[loc].name + " tried to add friend more than one time!");
                                SendMessage(userSockets[loc].socket, userSockets[loc].name + "#(duplicateInvitation)");
                            }
                        }
                        else if (sentMessage == "(showfriends)") // show friends of given user
                        {
                            string friendsMessage = "";
                            foreach (string hisFriend in userSockets[loc].friends)
                            {
                                friendsMessage += hisFriend + "$";
                            }
                            SendMessage(userSockets[loc].socket, sentMessage + "#" + friendsMessage);
                        }
                        else
                        {
                            if (sentMessage != "")
                            {
                                SetText(inviter + ": " + sentMessage);
                            }
                            for (int i = 0; i < socketLoq; i++)
                            {
                                if (userSockets[i].name != inviter && sentMessage != "" && alreadyFriend(inviter, userSockets[i]))
                                {
                                    if (userSockets[i].connected)
                                    {
                                        SendMessage(userSockets[i].socket, inviter + "#" + sentMessage);
                                    }
                                    else
                                    {
                                        pendingNotifications[pendingNotifId] = inviter + "%" + userSockets[i].name + "#(message)=" + sentMessage;
                                        pendingNotifId++;
                                        pendingNotifications[pendingNotifId] = "";
                                    }
                                }
                            }
                        }
                    }
                    catch // handle disconnection
                    {
                        SetText(userSockets[loc].name + " has disconnected!");
                        userSockets[loc].connected = false;
                        userSockets[loc].socket.Close();
                    }
                }
            }
        }
        private void Accept() // In case of acceptence
        {
            while (!terminate)
            {
                try
                {
                    Socket newClient   = serverSocket.Accept();
                    string name        = ReceiveMessage(newClient);
                    bool   memberFound = false;

                    foreach (string member in members)
                    {
                        if (name == member && !memberFound)
                        {
                            memberFound = true;
                            if (!isConnected(name))
                            {
                                if (!isConnectedBefore(name))
                                {
                                    SetText(name + " is connected!");
                                    SendMessage(newClient, "You are connected!");
                                    List <string> friends   = new List <string>();
                                    SocketNode    newSocket = new SocketNode(newClient, name, true, friends);
                                    userSockets[socketLoq] = newSocket;
                                    socketLoq++;
                                    checkPendingNotif(newSocket);
                                    Thread receiveThread = new Thread(() => Receive(newSocket));
                                    receiveThread.Start();
                                }
                                else
                                {
                                    for (int i = 0; i < socketLoq; i++)
                                    {
                                        if (userSockets[i].name == name)
                                        {
                                            string message = "You are connected!#";
                                            for (int j = 0; j < userSockets[i].friends.Count(); j++)
                                            {
                                                message += "$" + userSockets[i].friends[j];
                                            }
                                            SendMessage(newClient, message);
                                            SetText(name + " is connected again!");
                                            userSockets[i].connected = true;
                                            List <string> friends = userSockets[i].friends;
                                            userSockets[i].socket = newClient;
                                            SocketNode newSocket = new SocketNode(newClient, name, true, friends);
                                            checkPendingNotif(newSocket);
                                            Thread receiveThread2 = new Thread(() => Receive(newSocket));
                                            receiveThread2.Start();
                                        }
                                    }
                                }
                            }
                            else
                            {
                                SetText("User with the name " + name + " tried to connect but already connected!");
                                SendMessage(newClient, "You are already connected with the same name!");
                            }
                        }
                    }

                    if (!memberFound)
                    {
                        SendMessage(newClient, "You are not a member!");
                    }
                }
                catch
                {
                    SetText("Server no longer accepting any client!");
                }
            }
        }