예제 #1
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="args">コマンドライン</param>
        public void Initialize(string[] args)
        {
            MrsCmdParser parser = new MrsCmdParser('-');

            parser.Parse(args);

            m_connectionType    = (MrsConnectionType)parser.GetNumeric <Int32>("connectionType", (Int32)MrsConnectionType.TCP);
            m_canKeyExchange    = (parser.GetNumeric <Int32>("is_key_exchange", 1) != 0) ? true : false;
            m_canEncryptRecords = (parser.GetNumeric <Int32>("is_encrypt_records", 1) != 0) ? true : false;
            m_nRecordOptions    = (ushort)((m_canEncryptRecords == true) ? MrsRecordOption.ON_CRYPT : MrsRecordOption.NONE);
            m_nWriteDataLen     = parser.GetNumeric <UInt32>("write_data_len", 1024);
            m_nWriteCount       = parser.GetNumeric <UInt32>("write_count", 10);
            m_nConnections      = parser.GetNumeric <UInt32>("connections", 1);
            m_SleepMsec         = parser.GetNumeric <UInt32>("sleep_msec", 1);

            m_server_addr    = parser.GetString("server_addr", "127.0.0.1");
            m_server_port    = parser.GetNumeric <ushort>("server_port", 22222);
            m_timeout_msec   = parser.GetNumeric <UInt32>("timeout_msec", 5000);
            m_canValidRecord = (parser.GetNumeric <Int32>("is_valid_record", 1) != 0) ? true : false;
            m_ConnectionPath = parser.GetString("connection_path", "/");

            mrs.Connect.Request connect_request = new mrs.Connect.Request();
            connect_request.ConnectionType = MrsConnectionType.NONE;
            connect_request.Addr           = m_server_addr;
            connect_request.Port           = m_server_port;
            connect_request.TimeoutMsec    = m_timeout_msec;

            switch (m_connectionType)
            {
            case MrsConnectionType.TCP:
            case MrsConnectionType.UDP:
            case MrsConnectionType.WS:
            case MrsConnectionType.WSS:
            case MrsConnectionType.TCP_SSL:
            case MrsConnectionType.MRU:
            {
                connect_request.ConnectionType = m_connectionType;
                g_Connect.AddRequest(connect_request);
            }
            break;

            default:
            {
                connect_request.ConnectionType = MrsConnectionType.TCP;
                g_Connect.AddRequest(connect_request);

                connect_request.ConnectionType = MrsConnectionType.WSS;
                connect_request.Port          += 2;
                g_Connect.AddRequest(connect_request);

                connect_request.ConnectionType = MrsConnectionType.WS;
                connect_request.Port          -= 1;
                g_Connect.AddRequest(connect_request);
            }
            break;
            }
            g_Connect.SetFallbackConnectCallback(m_FallbackConnectCallback);
        }
예제 #2
0
        /// <summary>
        /// フォールバック接続時に呼ばれる
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="request"></param>
        private static void OnFallbackConnectCallback(MrsConnection connection, mrs.Connect.Request request)
        {
            MRS_LOG_DEBUG("OnFallbackConnectCallback connection_type={0} addr={1} port={2} timeout_msec={3}",
                          (int)request.ConnectionType, request.Addr, request.Port, request.TimeoutMsec);

            mrs_set_connect_callback(connection, m_OnConnect);
            mrs_set_disconnect_callback(connection, m_OnDisconnect);
            mrs_set_error_callback(connection, m_OnError);
            if (m_canValidRecord)
            {
                mrs_set_read_record_callback(connection, m_OnReadRecord);
            }
            else
            {
                mrs_set_read_callback(connection, m_OnRead);
            }
            mrs_connection_set_path(connection, m_ConnectionPath);
        }