private void appServer_NewRequestReceived(ESOPSession session, StringRequestInfo requestInfo) { switch (requestInfo.Key.ToUpper()) { case ("ECHO"): session.Send(requestInfo.Body); break; case ("LOGIN"): if (string.IsNullOrWhiteSpace(session.Name)) { session.Name = requestInfo.Body.Trim(); // session.Send("OK"); DataProtocol protocol = new DataProtocol(0, session.Name + "登录成功"); string pro = protocol.ToString(); session.Send(pro); ClientEntity client = new ClientEntity() { Name = session.Name, IP = session.RemoteEndPoint.Address.ToString() }; clients.Add(client); txtMsg.Invoke(new EventHandler(delegate { txtMsg.Items.Add(string.Format("用户{0}登录...当前连接数:{1} ", session.Name, appServer.SessionCount)); dataGridView1.DataSource = clients; })); if (LastRequestInfo.ContainsKey(session.Name)) { using (ESOPEntities entity = new ESOPEntities()) { var devidData = LastRequestInfo[session.Name].Parameters.ToList(); var publishId = devidData[0]; var publishData = entity.tb_F_PublishTask.Where(a => a.Id == publishId).FirstOrDefault(); if (publishData == null) { throw new ApplicationException(string.Format("任务{0}不存在", publishId)); } var PartName = entity.tb_M_Product.Where(a => a.PartNo == publishData.PartNo).Select(a => a.ParName).FirstOrDefault() ?? ""; //var devidData = LastRequestInfo.Parameters.ToList(); var docName = publishData.DocId; var docData = entity.tb_F_Doc.Where(a => a.Id == docName).FirstOrDefault() ?? new tb_F_Doc(); var devData = entity.tb_S_Device.Where(a => a.DevId == session.Name).FirstOrDefault() ?? new tb_S_Device(); DataProtocol protocol2 = new DataProtocol(1, docName, docData.PageCount ?? 0, devData.State2, docData.DocName + "," + PartName); string pro2 = protocol2.ToString(); //ProtocolHelper helper = new ProtocolHelper(pro); //DataProtocol protocol2 = helper.GetProtocol(); session.Send(pro2); } } } break; case ("SEND"): //从管理平台发送指令到客户端 //LastRequestInfo = requestInfo; var devid2 = requestInfo.Parameters.ToList(); //第一个参数为要显示的文档名称,后面跟着的参数为对应要发送的机台 using (ESOPEntities entity = new ESOPEntities()) { var publishId = devid2[0]; var publishData = entity.tb_F_PublishTask.Where(a => a.Id == publishId).FirstOrDefault(); if (publishData == null) { throw new ApplicationException(string.Format("任务{0}不存在", publishId)); } //var docid = devid2[0]; var docid = publishData.DocId; var docData = entity.tb_F_Doc.Where(a => a.Id == docid).FirstOrDefault() ?? new tb_F_Doc(); var PartName = entity.tb_M_Product.Where(a => a.PartNo == publishData.PartNo).Select(a => a.ParName).FirstOrDefault() ?? ""; //var PubLishData = entity.tb_F_PublishTask.Where(a=>a.Id==) //var devIdData = entity.tb_S_Device.Where(a=>a.d) for (int i = 1; i < devid2.Count; i++) { string name = devid2[i]; var devData = entity.tb_S_Device.Where(a => a.DevId == name).FirstOrDefault() ?? new tb_S_Device(); var clients = appServer.GetSessions(a => a.Name == name).ToList(); //.FirstOrDefault(); foreach (var client in clients) { if (client != null) { if (LastRequestInfo.ContainsKey(name)) { LastRequestInfo[name] = requestInfo; } else { LastRequestInfo.Add(name, requestInfo); } DataProtocol protocol = new DataProtocol(1, docid, docData.PageCount ?? 0, devData.State2, docData.DocName + "," + PartName); string pro = protocol.ToString(); //ProtocolHelper helper = new ProtocolHelper(pro); //DataProtocol protocol2 = helper.GetProtocol(); client.Send(pro); } } } } break; } }
private void ConnectCallback(IAsyncResult ar) { try { Socket connector = (Socket)ar.AsyncState; connector.EndConnect(ar); byte[] msg = System.Text.Encoding.UTF8.GetBytes(myUsername); int bytesSent = s.Send(msg); byte[] acceptDecline = new byte[1024 * 5000]; int acceptDeclineRec = connector.Receive(acceptDecline); String data = Encoding.UTF8.GetString(acceptDecline, 0, acceptDeclineRec); DataProtocol response = JsonConvert.DeserializeObject <DataProtocol>(data); if (response.Type == "connectionDeclined") { p2p.MainWindow.AppWindow.ShowMessageBoxCLientDecline(); connectionAccepted = false; s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.DisconnectCallback(); return; } else { connectionAccepted = true; HistoryDB.InitConvo(response.Username); connectedUsername = response.Username; convoDT = DateTime.Now; HistoryDB.AddMessage("New conversation started", convoDT, response.Username, "System"); p2p.MainWindow.AppWindow.AddMessage("System", "New conversation started", convoDT); p2p.MainWindow.AppWindow.AcceptedRequest(response.Username); } while (connectionAccepted) { byte[] bytes = new byte[1024 * 5000]; int bytesRec = connector.Receive(bytes); if (connector.Connected && bytesRec != 0) { data = Encoding.UTF8.GetString(bytes, 0, bytesRec); DataProtocol responseMessage = JsonConvert.DeserializeObject <DataProtocol>(data); DateTime timestamp = DateTime.Now; if (responseMessage.Type == "disconnect") { DataProtocol disconnect = new DataProtocol("disconnect", myUsername, " disconnected", new byte[1]); string jsonDisconnect = JsonConvert.SerializeObject(disconnect); byte[] disconnectMsg = System.Text.Encoding.UTF8.GetBytes(jsonDisconnect); HistoryDB.AddMessage(connectedUsername + " disconnected", timestamp, connectedUsername, connectedUsername); p2p.MainWindow.AppWindow.AddMessage("System", connectedUsername + " disconnected", convoDT); int byteSent = s.Send(disconnectMsg); connectionAccepted = false; s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.DisconnectCallback(); } else if (responseMessage.Type == "Image") { byte[] img = responseMessage.imgByte; HistoryDB.AddImage(img, DateTime.Now, connectedUsername); using (var ms = new System.IO.MemoryStream(img)) { var image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; // here image.StreamSource = ms; image.DecodePixelHeight = 150; image.DecodePixelWidth = 150; image.EndInit(); image.Freeze(); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); string photolocation = "tmper.jpg"; //file name encoder.Frames.Add(BitmapFrame.Create((BitmapImage)image)); using (var filestream = new FileStream(photolocation, FileMode.Create)) encoder.Save(filestream); p2p.MainWindow.AppWindow.DisplayImg(responseMessage.Username, timestamp, image); } } else { HistoryDB.AddMessage(responseMessage.Message, timestamp, responseMessage.Username, responseMessage.Username); p2p.MainWindow.AppWindow.AddMessage(responseMessage.Username, responseMessage.Message, timestamp); } } else { break; } } } catch (SocketException se) { if (connectionAccepted) { connectionAccepted = false; s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.ConnectionBroken(); } else { p2p.MainWindow.AppWindow.ShowMessage("There is no friend listening on that port!"); p2p.MainWindow.AppWindow.DisconnectCallback(); } } }
private void ListenCallback(IAsyncResult ar) { try { Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); s = handler; byte[] bytes = new byte[1024 * 5000]; int bytesRec = handler.Receive(bytes); string currUser = Encoding.UTF8.GetString(bytes, 0, bytesRec); connectedUsername = currUser; convoDT = DateTime.Now; /* Accept or decline incoming connection request */ if (!p2p.MainWindow.AppWindow.AcceptRequestBox(currUser)) // if not accepted connection { connectionAccepted = false; DataProtocol declineRequest = new DataProtocol("connectionDeclined", myUsername, "null", new byte[1]); string jsonDeclineRequest = JsonConvert.SerializeObject(declineRequest); byte[] msg = System.Text.Encoding.UTF8.GetBytes(jsonDeclineRequest); int bytesSent = s.Send(msg); s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.DisconnectCallback(); } else { connectionAccepted = true; HistoryDB.InitConvo(currUser); HistoryDB.AddMessage("New conversation started", convoDT, currUser, "System"); p2p.MainWindow.AppWindow.EnableDisconnectButton(); p2p.MainWindow.AppWindow.AddMessage("System", "New conversation started", convoDT); DataProtocol acceptRequest = new DataProtocol("connectionAccepted", myUsername, "null", new byte[1]); string jsonAcceptRequest = JsonConvert.SerializeObject(acceptRequest); byte[] msg = System.Text.Encoding.UTF8.GetBytes(jsonAcceptRequest); int bytesSent = s.Send(msg); } String data = null; while (connectionAccepted) { byte[] rbytes = new byte[1024 * 5000]; int rbytesRec = handler.Receive(rbytes); if (handler.Connected && rbytesRec != 0) { data = Encoding.UTF8.GetString(rbytes, 0, rbytesRec); DataProtocol responseMessage = JsonConvert.DeserializeObject <DataProtocol>(data); DateTime timestamp = DateTime.Now; if (responseMessage.Type == "disconnect") { DataProtocol disconnect = new DataProtocol("disconnect", myUsername, " disconnected", new byte[1]); string jsonDisconnect = JsonConvert.SerializeObject(disconnect); byte[] disconnectMsg = System.Text.Encoding.UTF8.GetBytes(jsonDisconnect); int bytesSen = s.Send(disconnectMsg); HistoryDB.AddMessage(connectedUsername + " disconnected", timestamp, connectedUsername, "System"); p2p.MainWindow.AppWindow.AddMessage("System", connectedUsername + " disconnected", convoDT); connectionAccepted = false; s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.DisconnectCallback(); } else if (responseMessage.Type == "Image") { byte[] img = responseMessage.imgByte; HistoryDB.AddImage(img, DateTime.Now, connectedUsername); using (var ms = new System.IO.MemoryStream(img)) { var image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; // here image.StreamSource = ms; image.DecodePixelHeight = 150; image.DecodePixelWidth = 150; image.EndInit(); image.Freeze(); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); string photolocation = "img.jpg"; //file name encoder.Frames.Add(BitmapFrame.Create((BitmapImage)image)); using (var filestream = new FileStream(photolocation, FileMode.Create)) encoder.Save(filestream); p2p.MainWindow.AppWindow.DisplayImg(responseMessage.Username, timestamp, image); } } else { HistoryDB.AddMessage(responseMessage.Message, timestamp, responseMessage.Username, responseMessage.Username); p2p.MainWindow.AppWindow.AddMessage(responseMessage.Username, responseMessage.Message, timestamp); } } else { break; } } } catch (SocketException se) { connectionAccepted = false; s.Shutdown(SocketShutdown.Both); s.Close(); p2p.MainWindow.AppWindow.ConnectionBroken(); p2p.MainWindow.AppWindow.DisconnectCallback(); } }
protected void SendNotif(int sessionId, int notifCode, DataProtocol protocol) { NotifSender.SendNotif(sessionId, notifCode, protocol); }