getting there
This commit is contained in:
		
							parent
							
								
									de6b28ab43
								
							
						
					
					
						commit
						7e77833452
					
				
							
								
								
									
										101
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								README.md
									
									
									
									
									
								
							| @ -13,25 +13,110 @@ npx cap sync | |||||||
| 
 | 
 | ||||||
| <docgen-index> | <docgen-index> | ||||||
| 
 | 
 | ||||||
| * [`echo(...)`](#echo) | * [`create(...)`](#create) | ||||||
|  | * [`connect(...)`](#connect) | ||||||
|  | * [`send(...)`](#send) | ||||||
|  | * [`disconnect(...)`](#disconnect) | ||||||
|  | * [`addListener('state', ...)`](#addlistenerstate-) | ||||||
|  | * [`addListener('message', ...)`](#addlistenermessage-) | ||||||
|  | * [Interfaces](#interfaces) | ||||||
| 
 | 
 | ||||||
| </docgen-index> | </docgen-index> | ||||||
| 
 | 
 | ||||||
| <docgen-api> | <docgen-api> | ||||||
| <!--Update the source file JSDoc comments and rerun docgen to update the docs below--> | <!--Update the source file JSDoc comments and rerun docgen to update the docs below--> | ||||||
| 
 | 
 | ||||||
| ### echo(...) | ### create(...) | ||||||
| 
 | 
 | ||||||
| ```typescript | ```typescript | ||||||
| echo(options: { value: string; }) => Promise<{ value: string; }> | create(options: { id: string; host: string; port: number; useTLS?: boolean; acceptInvalidCertificates?: boolean; }) => Promise<void> | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| | Param         | Type                            | | | Param         | Type                                                                                                            | | ||||||
| | ------------- | ------------------------------- | | | ------------- | --------------------------------------------------------------------------------------------------------------- | | ||||||
| | **`options`** | <code>{ value: string; }</code> | | | **`options`** | <code>{ id: string; host: string; port: number; useTLS?: boolean; acceptInvalidCertificates?: boolean; }</code> | | ||||||
| 
 |  | ||||||
| **Returns:** <code>Promise<{ value: string; }></code> |  | ||||||
| 
 | 
 | ||||||
| -------------------- | -------------------- | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | ### connect(...) | ||||||
|  | 
 | ||||||
|  | ```typescript | ||||||
|  | connect(options: { id: string; }) => Promise<void> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | | Param         | Type                         | | ||||||
|  | | ------------- | ---------------------------- | | ||||||
|  | | **`options`** | <code>{ id: string; }</code> | | ||||||
|  | 
 | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### send(...) | ||||||
|  | 
 | ||||||
|  | ```typescript | ||||||
|  | send(options: { id: string; message: string; }) => Promise<void> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | | Param         | Type                                          | | ||||||
|  | | ------------- | --------------------------------------------- | | ||||||
|  | | **`options`** | <code>{ id: string; message: string; }</code> | | ||||||
|  | 
 | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### disconnect(...) | ||||||
|  | 
 | ||||||
|  | ```typescript | ||||||
|  | disconnect(options: { id: string; }) => Promise<void> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | | Param         | Type                         | | ||||||
|  | | ------------- | ---------------------------- | | ||||||
|  | | **`options`** | <code>{ id: string; }</code> | | ||||||
|  | 
 | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### addListener('state', ...) | ||||||
|  | 
 | ||||||
|  | ```typescript | ||||||
|  | addListener(eventName: 'state', listenerFunc: (message: { id: string; state: string; }) => void) => Promise<PluginListenerHandle> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | | Param              | Type                                                              | | ||||||
|  | | ------------------ | ----------------------------------------------------------------- | | ||||||
|  | | **`eventName`**    | <code>'state'</code>                                              | | ||||||
|  | | **`listenerFunc`** | <code>(message: { id: string; state: string; }) => void</code> | | ||||||
|  | 
 | ||||||
|  | **Returns:** <code>Promise<<a href="#pluginlistenerhandle">PluginListenerHandle</a>></code> | ||||||
|  | 
 | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### addListener('message', ...) | ||||||
|  | 
 | ||||||
|  | ```typescript | ||||||
|  | addListener(eventName: 'message', listenerFunc: (message: { id: string; message: string; }) => void) => Promise<PluginListenerHandle> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | | Param              | Type                                                                | | ||||||
|  | | ------------------ | ------------------------------------------------------------------- | | ||||||
|  | | **`eventName`**    | <code>'message'</code>                                              | | ||||||
|  | | **`listenerFunc`** | <code>(message: { id: string; message: string; }) => void</code> | | ||||||
|  | 
 | ||||||
|  | **Returns:** <code>Promise<<a href="#pluginlistenerhandle">PluginListenerHandle</a>></code> | ||||||
|  | 
 | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### Interfaces | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #### PluginListenerHandle | ||||||
|  | 
 | ||||||
|  | | Prop         | Type                                      | | ||||||
|  | | ------------ | ----------------------------------------- | | ||||||
|  | | **`remove`** | <code>() => Promise<void></code> | | ||||||
|  | 
 | ||||||
| </docgen-api> | </docgen-api> | ||||||
|  | |||||||
| @ -80,7 +80,7 @@ public class Socket: NSObject { | |||||||
|     func receive(on connection: NWConnection) { |     func receive(on connection: NWConnection) { | ||||||
|         connection.receive(minimumIncompleteLength: 1, maximumLength: 65536) { (data, contentContext, isComplete, error) in |         connection.receive(minimumIncompleteLength: 1, maximumLength: 65536) { (data, contentContext, isComplete, error) in | ||||||
|             if let data = data, !data.isEmpty { |             if let data = data, !data.isEmpty { | ||||||
|                 if let message = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines) { |                 if let message = String(data: data, encoding: .utf8) { | ||||||
|                     self.delegate?.didReceiveMessage(socket: self.id, message: message) |                     self.delegate?.didReceiveMessage(socket: self.id, message: message) | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | |||||||
							
								
								
									
										3428
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										3428
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -76,5 +76,8 @@ | |||||||
|     "android": { |     "android": { | ||||||
|       "src": "android" |       "src": "android" | ||||||
|     } |     } | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "mitt": "^3.0.1" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ export default { | |||||||
|       name: 'capacitorSockets', |       name: 'capacitorSockets', | ||||||
|       globals: { |       globals: { | ||||||
|         '@capacitor/core': 'capacitorExports', |         '@capacitor/core': 'capacitorExports', | ||||||
|  |         "mitt": "mitt" | ||||||
|       }, |       }, | ||||||
|       sourcemap: true, |       sourcemap: true, | ||||||
|       inlineDynamicImports: true, |       inlineDynamicImports: true, | ||||||
| @ -18,5 +19,5 @@ export default { | |||||||
|       inlineDynamicImports: true, |       inlineDynamicImports: true, | ||||||
|     }, |     }, | ||||||
|   ], |   ], | ||||||
|   external: ['@capacitor/core'], |   external: ['@capacitor/core', "mitt"], | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -1,3 +1,11 @@ | |||||||
|  | import { PluginListenerHandle } from "@capacitor/core"; | ||||||
|  | 
 | ||||||
| export interface SocketsPlugin { | export interface SocketsPlugin { | ||||||
|   echo(options: { value: string }): Promise<{ value: string }>; |   create(options: { id: string; host: string; port: number, useTLS?: boolean, acceptInvalidCertificates?: boolean }): Promise<void>; | ||||||
|  |   connect(options: { id: string; }): Promise<void>; | ||||||
|  |   send(options: { id: string; message: string }): Promise<void>; | ||||||
|  |   disconnect(options: { id: string }): Promise<void>; | ||||||
|  |    | ||||||
|  |   addListener(eventName: "state", listenerFunc: (message: { id: string; state: string }) => void): Promise<PluginListenerHandle>; | ||||||
|  |   addListener(eventName: "message", listenerFunc: (message: { id: string; message: string }) => void): Promise<PluginListenerHandle>; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								src/index.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/index.ts
									
									
									
									
									
								
							| @ -1,10 +1,2 @@ | |||||||
| import { registerPlugin } from '@capacitor/core'; | import Socket from "./socket"; | ||||||
| 
 | export { Socket }; | ||||||
| import type { SocketsPlugin } from './definitions'; |  | ||||||
| 
 |  | ||||||
| const Sockets = registerPlugin<SocketsPlugin>('Sockets', { |  | ||||||
|   web: () => import('./web').then((m) => new m.SocketsWeb()), |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| export * from './definitions'; |  | ||||||
| export { Sockets }; |  | ||||||
|  | |||||||
							
								
								
									
										119
									
								
								src/socket.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								src/socket.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | |||||||
|  | import { registerPlugin } from "@capacitor/core"; | ||||||
|  | import type { SocketsPlugin } from "./definitions"; | ||||||
|  | import mitt, { Emitter } from "mitt"; | ||||||
|  | 
 | ||||||
|  | const Sockets = registerPlugin<SocketsPlugin>("Sockets"); | ||||||
|  | 
 | ||||||
|  | type SocketEvents = { | ||||||
|  | 	message: string; | ||||||
|  | 	state: string; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class SocketManager { | ||||||
|  | 	private static instance: SocketManager; | ||||||
|  | 	private socketsMap: Map<string, Socket> = new Map(); | ||||||
|  | 
 | ||||||
|  | 	private constructor() { | ||||||
|  | 		this.addGlobalListeners(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static getInstance() { | ||||||
|  | 		if (!SocketManager.instance) { | ||||||
|  | 			SocketManager.instance = new SocketManager(); | ||||||
|  | 		} | ||||||
|  | 		return SocketManager.instance; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public registerSocket(socket: Socket) { | ||||||
|  | 		this.socketsMap.set(socket.id, socket); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public unregisterSocket(socket: Socket) { | ||||||
|  | 		this.socketsMap.delete(socket.id); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private addGlobalListeners() { | ||||||
|  | 		Sockets.addListener("state", (data) => { | ||||||
|  | 			let socket = this.socketsMap.get(data.id); | ||||||
|  | 			if (socket) { | ||||||
|  | 				socket.didChangeState(data); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		Sockets.addListener("message", (data) => { | ||||||
|  | 			let socket = this.socketsMap.get(data.id); | ||||||
|  | 			if (socket) { | ||||||
|  | 				socket.didReceiveMessage(data); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default class Socket { | ||||||
|  | 	id: string; | ||||||
|  | 	host: string; | ||||||
|  | 	port: number; | ||||||
|  | 	useTLS: boolean; | ||||||
|  | 	acceptInvalidCertificates: boolean; | ||||||
|  | 
 | ||||||
|  | 	private emitter: Emitter<SocketEvents>; | ||||||
|  | 
 | ||||||
|  | 	constructor(config: { id: string; host: string; port: number; useTLS?: boolean; acceptInvalidCertificates?: boolean }) { | ||||||
|  | 		console.log(config); | ||||||
|  | 
 | ||||||
|  | 		this.id = config.id; | ||||||
|  | 		this.host = config.host; | ||||||
|  | 		this.port = config.port; | ||||||
|  | 		this.useTLS = config.useTLS ?? false; | ||||||
|  | 		this.acceptInvalidCertificates = config.acceptInvalidCertificates ?? false; | ||||||
|  | 
 | ||||||
|  | 		this.emitter = mitt<SocketEvents>(); | ||||||
|  | 
 | ||||||
|  | 		this.create(); | ||||||
|  | 
 | ||||||
|  | 		SocketManager.getInstance().registerSocket(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	on(event: keyof SocketEvents, handler: (data: any) => void) { | ||||||
|  | 		this.emitter.on(event, handler); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	create() { | ||||||
|  | 		Sockets.create({ | ||||||
|  | 			id: this.id, | ||||||
|  | 			host: this.host, | ||||||
|  | 			port: this.port, | ||||||
|  | 			useTLS: this.useTLS, | ||||||
|  | 			acceptInvalidCertificates: this.acceptInvalidCertificates, | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	connect() { | ||||||
|  | 		Sockets.connect({ | ||||||
|  | 			id: this.id, | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	disconnect() { | ||||||
|  | 		Sockets.disconnect({ | ||||||
|  | 			id: this.id, | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		SocketManager.getInstance().unregisterSocket(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	send(message: string) { | ||||||
|  | 		Sockets.send({ | ||||||
|  | 			id: this.id, | ||||||
|  | 			message: message | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	didChangeState(data: { state: string }) { | ||||||
|  | 		this.emitter.emit("state", data.state); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	didReceiveMessage(data: { message: string }) { | ||||||
|  | 		this.emitter.emit("message", data.message); | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user