Пример #1
0
        public static bool CloseConnection(string Data)
        {
            PushConnectNetworkData pdata = null;
            NetRedirLegacy         redir = null;

            try
            {
                pdata = JsonConvert.DeserializeObject <PushConnectNetworkData>(Data);
            }
            catch (Exception ee)
            {
                Debug.WriteLine(ee.ToString());
            }

            if (pdata == null)
            {
                return(false);
            }

            lock (Locker)
            {
                if (Redirs.ContainsKey(pdata.GUID) == false)
                {
                    return(false);
                }
                redir = Redirs[pdata.GUID];
            }

            return(redir.CloseConnection());
        }
Пример #2
0
        public bool SendDataToSocket(PushConnectNetworkData data)
        {
            try
            {
                if (SequenceBuffer.ContainsKey(RunningSequence) == true)
                {
                    do
                    {
                        RunningSequence++;
                        socket.Send(SequenceBuffer[RunningSequence - 1].data);
                        SequenceBuffer.Remove(RunningSequence - 1);
                    } while (SequenceBuffer.ContainsKey(RunningSequence) == true);
                }

                if (RunningSequence != data.Seq)
                {
                    RunningSequence++;
                    SequenceBuffer.Add(data.Seq, data);
                    return(true);
                }

                //Debug.WriteLine("TX: " + SessionID + " " + BitConverter.ToString(data));
                socket.Send(data.data);
                RunningSequence++;
                LastUpdated = DateTime.Now;
            }
            catch
            {
                return(false);
            }
            return(true);
        }
Пример #3
0
        public PushConnectNetworkData GetData()
        {
            PushConnectNetworkData res = new PushConnectNetworkData();

            res.GUID   = SessionID;
            res.Result = 2;
            int Count = 0;

            LastUpdated = DateTime.Now;
            lock (RXLocker)
            {
                Count = RXStack.Count;
            }
            if (Count > 0)
            {
                lock (RXLocker)
                {
                    res.Seq = Sequence;
                    Sequence++;
                    res.data = RXStack[0];
                    RXStack.RemoveAt(0);
                    //Debug.WriteLine("RX: " + SessionID + " POP " + BitConverter.ToString(res.data));
                }
                res.Result = 0;
                return(res);
            }
            if (Count == 0)
            {
                lock (RXLocker)
                {
                    RXEvent.Reset();
                }
                if (RXEvent.WaitOne(30000) == false)
                {
                    res.Result = 1;
                    return(res);
                }
                lock (RXLocker)
                {
                    res.Seq = Sequence;
                    Sequence++;
                    res.Result = 0;
                    res.data   = RXStack[0];
                    RXStack.RemoveAt(0);
                    //Debug.WriteLine("RX: " + SessionID + " POP " + BitConverter.ToString(res.data));
                }
                return(res);
            }

            return(res);
        }
Пример #4
0
        public static PushConnectNetworkData ProcessDataRecv(string SessionID)
        {
            PushConnectNetworkData res = new PushConnectNetworkData();

            res.GUID   = SessionID;
            res.Result = 0x16;
            NetRedirLegacy r = null;

            lock (Locker)
            {
                if (Redirs.ContainsKey(SessionID) == false)
                {
                    return(res);
                }
                r = Redirs[SessionID];
            }
            return(r.GetData());
        }
Пример #5
0
        public static PushConnectNetworkData PullNetData(string ReqString, Network net)
        {
            PushConnectNetworkData Res = new PushConnectNetworkData();
            PushConnectNetworkData req;

            try
            {
                req = JsonConvert.DeserializeObject <PushConnectNetworkData>(ReqString);
            }
            catch (Exception ee)
            {
                Debug.WriteLine(ee.ToString());
                Res.Result = 0x16;
                return(Res);
            }

            return(MainNetRedir.ProcessDataRecv(req.GUID));
        }
Пример #6
0
        public RESTStatus PushNetworkCloseData(SQLLib sql, PushConnectNetworkData data, NetworkConnectionInfo ni, string MachineID)
        {
            if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            RemoteNetworkConnectionWSCrosser.CloseSession(data.GUID);

            string sess = Guid.NewGuid().ToString();

            data.data = null;

            PushData p = new PushData();

            p.Action          = "netclosedata2";
            p.ReplyID         = sess;
            p.AdditionalData1 = JsonConvert.SerializeObject(data);

            PushServiceHelper.SendPushService(MachineID, p, 1);
            PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 1, sess);

            if (resp == null)
            {
                ni.Error   = "No response";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.NoContent);
            }

            try
            {
                res3 = JsonConvert.DeserializeObject <PushConnectNetworkResult>(resp.Data.ToString());
            }
            catch
            {
                ni.Error   = "Faulty data";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.NoContent);
            }

            return(RESTStatus.Success);
        }