/// <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); }
/// <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); }