Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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();
                }
            }
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
 protected void SendNotif(int sessionId, int notifCode, DataProtocol protocol)
 {
     NotifSender.SendNotif(sessionId, notifCode, protocol);
 }