Pārlūkot izejas kodu

hwyzm并发取号

wuyi 1 gadu atpakaļ
vecāks
revīzija
4914fe2e59

+ 1 - 1
src/rcs-number/impl/cloud214.service.ts

@@ -58,7 +58,7 @@ export class cloud214 extends GetNumberService {
                 rawResponse: result
             }
         } catch (e) {
-            throw new Error(`Failed to get a valid number: ${e.message}`)
+            throw new Error(`Platform:cloud Failed to get a valid number: ${e.message}`)
         }
     }
 

+ 73 - 19
src/rcs-number/impl/hwyzm.service.ts

@@ -15,31 +15,84 @@ export class hwyzm extends GetNumberService {
     source: RcsNumberSource = RcsNumberSource.hwyzm
 
     async getNumber(country: string, num?: number): Promise<GetNumberResponse> {
-        const res = await axiosInstance.post('phoneInfo', {
-            merNo,
-            app,
-            country: country.toUpperCase(),
-            sign
-        })
-        const result = res.data
-        if (result.code !== 1 || !(result.data)) {
-            throw new Error(result.msg)
+
+        const numberList = []
+
+        const requestPhoneInfo = async () => {
+            const res = await axiosInstance.post('phoneInfo', {
+                merNo,
+                app,
+                country: country.toUpperCase(),
+                sign
+            })
+            return res.data
         }
-        const data = result.data
 
-        const orderId = data.orderId
-        const number = data.number
+        const requests = Array(20)
+            .fill(null)
+            .map(() => requestPhoneInfo())
+
+        try {
+            const firstValidResult = await Promise.any(
+                requests.map(async (request, index) => {
+                    const res = await request
+                    if (res.code === 1 || res.data) {
+                        return res
+                    }
+                    throw new Error(`Request ${index + 1} failed with message: ${res.message}`)
+                })
+            )
+
+            Promise.allSettled(requests).then(results => {
+                results.forEach((result, index) => {
+                    try {
+                        if (result.status === 'fulfilled' && result.value.code === 1) {
+                            if (!numberList.includes(result.value.data)) {
+                                numberList.push(JSON.stringify(result.value.data))
+                            }
+                        } else if (result.status === 'rejected') {
+                            console.error(`Request ${index + 1} failed:`, result.reason)
+                        }
+                    } catch (error) {
+                        console.error(`Platform:hwyzm Error processing result ${index + 1}:`, error)
+                    }
 
-        return {
-            orderId,
-            number,
-            operatorCode: '',
-            operatorName: '',
-            rawResponse: result
+                })
+
+                numberList.shift()
+                numberList.forEach(number => {
+                    this.releaseNumber(number.toString())
+                })
+            }).catch(error => {
+                console.error('Platform:hwyzm Error in Promise.allSettled:', error)
+            })
+
+            const { orderId, number } = firstValidResult.data
+
+            return {
+                orderId,
+                number,
+                operatorCode: '',
+                operatorName: '',
+                rawResponse: firstValidResult
+            }
+        } catch (e) {
+            throw new Error(`Platform:hwyzm Failed to get a valid number: ${e.message}`)
         }
     }
 
     async releaseNumber(number: string) {
+        const obj = JSON.parse(number)
+
+        if (obj.number != null && obj.orderId != null) {
+            const res = await axiosInstance.post('releaseInfo', {
+                cid: obj.orderId,
+                app,
+                number: obj.number,
+                sign
+            })
+            console.log(`Platform:hwyzm Release Number(${obj.number}):`, res.data)
+        }
     }
 
     async retriveMessage(orderId: string, num?: number): Promise<string> {
@@ -54,5 +107,6 @@ export class hwyzm extends GetNumberService {
         }
     }
 
-    async blockNumber(number: string) {}
+    async blockNumber(number: string) {
+    }
 }