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); }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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]); } } } } }
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!"); } } }