void StartToConnect() { mrs.Connect.Request connect_request = new mrs.Connect.Request(); connect_request.ConnectionType = MrsConnectionType.TCP; connect_request.Addr = g_ArgServerAddr; connect_request.Port = ToUInt16(g_ArgServerPort); connect_request.TimeoutMsec = ToUInt32(g_ArgTimeoutMsec); g_Connect.AddRequest(connect_request); g_Connect.SetFallbackConnectCallback(on_fallback_connect); mrs_initialize(); do { for (UInt32 i = 0; i < g_Connections; ++i) { MrsConnection client = g_Connect.FallbackConnect(); g_nowconnect = client; if (MrsConnection.Zero == client) { MRS_LOG_ERR("mrs_connect[{0}]: {1}", i, ToString(mrs_get_error_string(mrs_get_last_error()))); break; } } } while (false); }
// フォールバック接続時に呼ばれる private static void on_fallback_connect(MrsConnection connection, mrs.Connect.Request request) { MRS_LOG_DEBUG("on_fallback_connect connection_type=" + request.ConnectionType + " addr=" + request.Addr + " port=" + request.Port + " timeout_msec=" + request.TimeoutMsec); mrs_set_connect_callback(connection, on_connect); mrs_set_disconnect_callback(connection, on_disconnect); mrs_set_error_callback(connection, on_error); mrs_set_read_record_callback(connection, on_read_record); mrs_connection_set_path(connection, g_ArgConnectionPath); }
public void StartEchoClient() { MRS_LOG_DEBUG("connection_type={0} is_key_exchange={1} is_encrypt_records={2} write_data_len={3} write_count={4} connections={5} server_addr={6} server_port={7} timeout_msec={8} is_valid_record={9} connection_path={10}", g_ArgConnectionType, g_ArgIsKeyExchange, g_ArgIsEncryptRecords, g_ArgWriteDataLen, g_ArgWriteCount, g_ArgConnections, g_ArgServerAddr, g_ArgServerPort, g_ArgTimeoutMsec, g_ArgIsValidRecord, g_ArgConnectionPath); g_nowconnect = new MrsConnection(); g_IsKeyExchange = (0 != ToUInt32(g_ArgIsKeyExchange)); g_IsEncryptRecords = (0 != ToUInt32(g_ArgIsEncryptRecords)); g_RecordOptions = g_IsEncryptRecords ? (UInt16)MrsRecordOption.ON_CRYPT : (UInt16)MrsRecordOption.NONE; // g_RecordOptions |= (UInt16)MrsRecordOption.UDP_UNRELIABLE; // g_RecordOptions |= (UInt16)MrsRecordOption.UDP_UNSEQUENCED; g_WriteDataLen = ToUInt32(g_ArgWriteDataLen); g_WriteCount = ToUInt32(g_ArgWriteCount); g_Connections = ToUInt32(g_ArgConnections); g_IsValidRecord = (0 != ToUInt32(g_ArgIsValidRecord)); mrs.Connect.Request connect_request = new mrs.Connect.Request(); connect_request.ConnectionType = MrsConnectionType.NONE; connect_request.Addr = g_ArgServerAddr; connect_request.Port = ToUInt16(g_ArgServerPort); connect_request.TimeoutMsec = ToUInt32(g_ArgTimeoutMsec); Int32 connection_type = ToInt32(g_ArgConnectionType); switch (connection_type) { case (Int32)MrsConnectionType.TCP: case (Int32)MrsConnectionType.UDP: case (Int32)MrsConnectionType.WS: case (Int32)MrsConnectionType.WSS: case (Int32)MrsConnectionType.TCP_SSL: case (Int32)MrsConnectionType.MRU: { connect_request.ConnectionType = (MrsConnectionType)connection_type; g_Connect.AddRequest(connect_request); } break; default: { #if UNITY_WEBGL connect_request.ConnectionType = MrsConnectionType.WSS; g_Connect.AddRequest(connect_request); connect_request.ConnectionType = MrsConnectionType.WS; connect_request.Port -= 1; g_Connect.AddRequest(connect_request); #else 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); #endif } break; } g_Connect.SetFallbackConnectCallback(on_fallback_connect); netsettings.addr = connect_request.Addr; netsettings.port = connect_request.Port; mrs_initialize(); do { for (UInt32 i = 0; i < g_Connections; ++i) { MrsConnection client = g_Connect.FallbackConnect(); g_nowconnect = client; netsettings.connection = client; if (MrsConnection.Zero == client) { MRS_LOG_ERR("mrs_connect[{0}]: {1}", i, ToString(mrs_get_error_string(mrs_get_last_error()))); break; } } }while (false); }