private void saveAndClose()
        {
            if (CM != null)
            {
                CM.disconnectEverything();
            }

            if (SessionMgr != null)
            {
                if (SessionMgr.endSession())
                {
                    showMessageBox("Actions_Saved_Title", "Actions_Saved_Content",
                                   (res) =>
                    {
                        //Execute Shutdown.
                        MessengerInstance.Send <ApplicationClosing>(new ApplicationClosing(false));
                    });
                }
                else
                {
                    showMessageBox("MessageBox_Error_Title", "Actions_Error_CouldntSave", null);
                }
            }
            else
            {
                _Log.Error("Session Manager N/A");
            }
        }
Beispiel #2
0
    protected void btnWriteSession_Click(object sender, EventArgs e)
    {
        string sessionId = Request.Cookies[MySessionID].Value;
        IDictionary <string, object> session = SessionMgr.GetSeccion(sessionId);

        session["服务端的数据"] = DateTime.Now.ToString();
    }
        void ProfileSvc_ProfileLoaded(AsyncOperationInstance operation)
        {
            ProfileSvc.ProfileLoaded -= ProfileSvc_ProfileLoaded;
            var project = ProfileSvc.ProjectID;

            var paths = Settings.getOptions().Paths;


            if (CM.truncateSyncTable())
            {
                CM.disconnectFromMobileDB();
                SessionMgr.endSession();
                SessionMgr.startSession();
                var workingPaths = SessionMgr.createCleanWorkingCopies(paths);
                CM.connectToMobileDB(workingPaths);
            }
            else
            {
                if (CurrentOperation != null)
                {
                    CurrentOperation.failure("Actions_Error_CouldntTruncateSync", "");
                }
                _Log.Info("Could not truncate Sync Table, aborting clean.");
            }


            if (ProfileSvc.ProjectID != project)
            {
                ProfileSvc.ProjectID = project;
            }
            if (CurrentOperation != null)
            {
                CurrentOperation.success();
            }
        }
Beispiel #4
0
        private void OnRawReceive(Span <byte> data, IPEndPoint endPoint)
        {
            //检查黑名单
            if (SessionMgr.InBad(endPoint))
            {
                return;
            }
            //检查格式
            var(isBad, conv) = Kcp.IsBadHeadFormat(data);
            if (isBad)
            {
                SessionMgr.AddBad(endPoint); return;
            }

            var session = SessionMgr.DetermineIsBadOrNewConnection(conv, endPoint);

            if (session == null)
            {
                return;
            }
            KcpSession.KCPInput(session, data);
            using var mem = _sock.GetMemory(OS._8kb);
            var buff = mem.Memory.ToArray();
            var rcnt = session.kcp.Recv(buff, 0, buff.Length);

            if (rcnt > 0)
            {
                OnKcpReceive?.Invoke(session, buff.AsSpan().Slice(0, rcnt), endPoint);
            }
        }
Beispiel #5
0
    protected void btnReadSession_Click(object sender, EventArgs e)
    {
        string sessionId = Request.Cookies[MySessionID].Value;
        IDictionary <string, object> session = SessionMgr.GetSeccion(sessionId);

        Button1.Text = session["服务端的数据"].ToString();
    }
Beispiel #6
0
        /// <summary>
        /// 원격 서버에 접속 성공 했을 때 호출됩니다.
        /// </summary>
        /// <param name="socket"></param>
        public void OnConnectCompleted(Socket socket, Session token)
        {
            token.OnSessionClosed += OnSessionClosed;

            SessionMgr.Add(token);

            // SocketAsyncEventArgsPool에서 빼오지 않고 그때 그때 할당해서 사용한다.
            // 풀은 서버에서 클라이언트와의 통신용으로만 쓰려고 만든것이기 때문이다.
            // 클라이언트 입장에서 서버와 통신을 할 때는 접속한 서버당 두개의 EventArgs만 있으면 되기 때문에 그냥 new해서 쓴다.
            // 서버간 연결에서도 마찬가지이다.
            // 풀링처리를 하려면 c->s로 가는 별도의 풀을 만들어서 써야 한다.
            SocketAsyncEventArgs receive_event_arg = new SocketAsyncEventArgs();

            receive_event_arg.Completed += new EventHandler <SocketAsyncEventArgs>(ReceiveCompleted);
            receive_event_arg.UserToken  = token;
            receive_event_arg.SetBuffer(new byte[1024], 0, 1024);

            SocketAsyncEventArgs send_event_arg = new SocketAsyncEventArgs();

            send_event_arg.Completed += new EventHandler <SocketAsyncEventArgs>(SendCompleted);
            send_event_arg.UserToken  = token;
            send_event_arg.SetBuffer(null, 0, 0);

            BeginReceive(socket, receive_event_arg, send_event_arg);
        }
Beispiel #7
0
        /// <summary>
        /// 새로운 클라이언트가 접속 성공 했을 때 호출됩니다.
        /// AcceptAsync의 콜백 매소드에서 호출되며 여러 스레드에서 동시에 호출될 수 있기 때문에 공유자원에 접근할 때는 주의해야 합니다.
        /// </summary>
        /// <param name="client_socket"></param>
        void OnNewClient(Socket client_socket, object token)
        {
            // UserToken은 매번 새로 생성하여 깨끗한 인스턴스로 넣어준다.
            var uniqueId        = MakeSequenceIdForSession();
            var messageResolver = new TMessageResolver();

            messageResolver.Init(ServerOpt.ReceiveSecondaryBufferSize);
            var user_token = new Session(true, uniqueId, PacketDispatcher, messageResolver, ServerOpt);

            user_token.OnSessionClosed += OnSessionClosed;


            SessionMgr.Add(user_token);

            // 플에서 하나 꺼내와 사용한다.
            SocketAsyncEventArgs receive_args = this.ReceiveEventArgsPool.Pop();
            SocketAsyncEventArgs send_args    = this.SendEventArgsPool.Pop();

            receive_args.UserToken = user_token;
            send_args.UserToken    = user_token;


            user_token.OnConnected();

            BeginReceive(client_socket, receive_args, send_args);
        }
        private string GetLogonToken()
        {
            SessionMgr        cdSessionManager = new SessionMgr();
            EnterpriseSession cdSession;
            string            cdToken = string.Empty;

            // CMS Credential Variables
            String cmsUser     = Utilities.GetBOAccountUserId();
            String cmsPassword = Utilities.GetBOAccountUserPassoword();
            String cmsServer   = ConfigurationManager.AppSettings["BOServerLogonTokenURL"].ToString();
            // CMS Configuration Variables
            String cmsAuthType = "secEnterprise";

            // Create Logon Token for use with Open Document method
            try
            {
                // logon to CMS & return the active session
                cdSession = cdSessionManager.Logon(cmsUser, cmsPassword, cmsServer, cmsAuthType);
                // create the security token for this logon
                // The createLogonToken method allows you to specify the machine that can use the token (which
                // can be empty to allow any user to use the token), the number of minutes the token is valid for, and
                // the number of logons that the token can be used for as parameters.
                cdToken = cdSession.LogonTokenMgr.CreateLogonTokenEx("", 5, 1);
                cdSession.Logoff();
            }
            catch (Exception ex)
            {
                ExceptionHandler("Error in fetching logon token", ex.Message);
            }

            return(cdToken);
        }
 private void disconnectFromMobile()
 {
     new Action(() =>
     {
         SessionMgr.endSession();
         ConnectionManager.disconnectFromMobileDB();
     }).BeginInvoke(null, null);
 }
Beispiel #10
0
        public void Listen(string host, int port, int backlog, SocketOption socketOption)
        {
            Listener client_listener = new Listener();

            client_listener.OnNewClientCallback += OnNewClient;
            client_listener.Start(host, port, backlog, socketOption);

            // heartbeat.
            byte check_interval = 10;

            SessionMgr.StartHeartbeatChecking(check_interval, check_interval);
        }
Beispiel #11
0
        static void OnAddNetworkConn(Context ctx, object arg)
        {
            NetworkTransport conn = (NetworkTransport)ctx.GetSender();

            connMap[conn.GetID()] = conn;
            SessionMgr sessionMgr = conn.GetSessionMgr();

            sessionMgr.OnLinkerConneted(conn);
            conn.ReadMsgPacket();
            var timerID = worker.AddTimer(5 * 1000, OnNetworkConnPing, conn);

            tickTimer[conn.GetID()] = timerID;
        }
Beispiel #12
0
        static void OnRemoveNetworkConn(Context ctx, object arg)
        {
            NetworkTransport conn = (NetworkTransport)ctx.GetSender();

            connMap.Remove(conn.GetID());
            SessionMgr sessionMgr = conn.GetSessionMgr();

            sessionMgr.OnLinkerClosed(conn);
            UInt64 timerID = 0;

            if (tickTimer.TryGetValue(conn.GetID(), out timerID) == true)
            {
                worker.RemoveTimer(timerID);
            }
        }
Beispiel #13
0
        public void OnSessionClosed(Session token)
        {
            SessionMgr.Remove(token);

            // Free the SocketAsyncEventArg so they can be reused by another client
            // 버퍼는 반환할 필요가 없다. SocketAsyncEventArg가 버퍼를 물고 있기 때문에
            // 이것을 재사용 할 때 물고 있는 버퍼를 그대로 사용하면 되기 때문이다.
            if (ReceiveEventArgsPool != null)
            {
                ReceiveEventArgsPool.Push(token.ReceiveEventArgs);
            }

            if (SendEventArgsPool != null)
            {
                SendEventArgsPool.Push(token.SendEventArgs);
            }

            token.SetEventArgs(null, null);
        }
Beispiel #14
0
        public DataSourceArray connectToLoginSite(string sitecode)
        {
            // TODO - FIX!!! This is very ugly - here so that SOAP and REST services can both be stateful or stateless
            if (!Convert.ToBoolean(_mySession.MdwsConfiguration.AllConfigs[MdwsConfigConstants.CONNECTION_POOL_CONFIG_SECTION][MdwsConfigConstants.CONNECTION_POOLING]))
            {
                return(new gov.va.medora.mdws.ConnectionLib(_mySession).connectToLoginSite(sitecode));
            }

            DataSourceArray result = new DataSourceArray();

            try
            {
                MdwsUtils.checkNullArgs(MdwsUtils.getArgsDictionary(System.Reflection.MethodInfo.GetCurrentMethod().GetParameters(), new List <object>()
                {
                    sitecode
                }));
                MdwsUtils.checkSiteTable(_mySession, sitecode);
                MdwsUtils.checkConnections(_mySession, sitecode);

                Site               site    = _mySession.SiteTable.getSite(sitecode);
                DataSource         src     = site.getDataSourceByModality("HIS");
                AbstractDaoFactory factory = AbstractDaoFactory.getDaoFactory(AbstractDaoFactory.getConstant(src.Protocol));

                // REST
                SessionMgr.getInstance().setConnection(_mySession, sitecode);
                // END REST
                result = new DataSourceArray(src);

                result.items[0].welcomeMessage = "TODO - implement cached connection messages in pool";
            }
            catch (Exception e)
            {
                result.fault = new FaultTO(e.Message);
            }
            finally
            {
                //RestSessionMgr.getInstance().returnConnections(_mySession);
            }
            return(result);
        }
 private void connectToMobile()
 {
     if (SessionMgr.canResumeSession())
     {
         showYesNoBox("ConnectionsPage_ResumeSession_Title", "ConnectionsPage_ResumeSession_Description", System.Windows.MessageBoxResult.No,
                      (res) =>
         {
             if (res == System.Windows.MessageBoxResult.Yes)
             {
                 new Action <DBPaths>(connectTo).BeginInvoke(SessionMgr.resumeSession(_settings.Paths), null, null);
             }
             else
             {
                 SessionMgr.startSession();
                 new Action <DBPaths>(connectTo).BeginInvoke(SessionMgr.createWorkingCopies(_settings.Paths), null, null);
             }
         });
     }
     else
     {
         SessionMgr.startSession();
         new Action <DBPaths>(connectTo).BeginInvoke(SessionMgr.createWorkingCopies(_settings.Paths), null, null);
     }
 }
Beispiel #16
0
 private void _sock_OnUpdate(long obj)
 {
     SessionMgr.Update(obj);
 }