This commit is contained in:
Peter Maquiran
2024-02-02 10:50:20 +01:00
15 changed files with 449 additions and 380 deletions
+10 -4
View File
@@ -334,22 +334,28 @@ export class RoomService {
message.loadHistory = this.DoneLoadingHistory
this.lastMessage = message;
this.calDateDuration(ChatMessage._updatedAt);
try {
this.calDateDuration(ChatMessage._updatedAt);
} catch (error) {
console.log(error)
}
if (message.t == 'r') {
this.name = message.msg;
}
if (this.isSenderIsNotMe(ChatMessage)) {
//if (this.isSenderIsNotMe(ChatMessage)) {
/* this.NativeNotificationService.sendNotificationChat({
message: message.msg,
title: this.name
}); */
}
//}
if (this.hasLoadHistory == true) {
this.messages.push(message)
await message.addMessageDB()
message.addMessageDB()
} else {
this.messagesBeforeOfflineAPI.push(message)
}
+217 -186
View File
@@ -67,157 +67,75 @@ export class SocketConnectionMCRService {
}
class ReconnectingWebSocketSignalR {
// class ReconnectingWebSocketSignalR {
private connection: any
isOpen: boolean = false
private callbacks: Function[] = []
private onDisconnect: Function[] = []
private onConnect: Function[] = []
private stop = true
constructor() {}
connect() {
console.log("try to connect=================================")
this.stop = false
this.connection = new signalR.HubConnectionBuilder()
.withUrl("https://gdcmapi-dev.dyndns.info/FileHub", {
transport: signalR.HttpTransportType.LongPolling,
accessTokenFactory: () => SessionStore.user.Authorization
}).configureLogging(signalR.LogLevel.Information)
.build();
this.connection.start()
.then(() => {
this.isOpen = true;
console.log('WebSocket connection established');
this.onConnect.forEach(callback => callback());
})
.catch((error) => {
console.error("Error starting SignalR connection:", error);
});
this.connection.on("ReceiveMessage", (message) => {
const data: any = JSON.parse(message)
console.log("ReceiveMessage", data)
this.callbacks.forEach(callback => callback(data));
})
this.connection.onclose((error) => {
console.log('WebSocket connection closed..');
this.isOpen = false;
this.onDisconnect.forEach(callback => callback());
// Attempt to reconnect after a delay
if(this.stop == false) {
setTimeout(() => {
this.connect();
}, 1000); // Adjust the delay as needed
}
});
}
disconnect() {
this.stop = true
if(this.isOpen == true) {
this.connection.stop()
.then(() => {
console.log('WebSocket connection was closed by client');
this.isOpen = false;
this.onDisconnect.forEach(callback => callback());
console.log("SignalR connection stopped.");
})
.catch((error) => {
console.error("Error stopping SignalR connection by client:", error);
});
}
}
subscribe(callback) {
this.callbacks.push(callback);
}
unsubscribe(callback) {
this.callbacks = this.callbacks.filter(cb => cb !== callback);
}
onDisconnectCallback(callback) {
this.onDisconnect.push(callback)
}
onConnectCallback(callback) {
this.onConnect.push(callback)
}
}
interface socketResponse {
index: string
Guid: string
IsCompleted: Boolean
}
// class ReconnectingWebSocket {
// private url: string
// private socket
// isOpen: boolean
// private connection: any
// isOpen: boolean = false
// private callbacks: Function[] = []
// private onDisconnect: Function[] = []
// private onConnect: Function[] = []
// private stop = true
// http: HttpClient = window["http"]
// constructor(url) {
// this.url = url;
// this.socket = null;
// this.isOpen = false;
// this.connect();
// }
// constructor() {}
// connect() {
// this.socket = new WebSocket(this.url);
// console.log("try to connect=================================")
// this.stop = false
// this.socket.addEventListener('open', (event) => {
// this.connection = new signalR.HubConnectionBuilder()
// .withUrl("https://gdcmapi-dev.dyndns.info/FileHub", {
// transport: signalR.HttpTransportType.LongPolling,
// accessTokenFactory: () => SessionStore.user.Authorization
// }).configureLogging(signalR.LogLevel.Information)
// .build();
// this.connection.start()
// .then(() => {
// this.isOpen = true;
// console.log('WebSocket connection established');
// // Example: Send a message to the server
// this.socket.send('Hello, WebSocket Server!');
// this.onConnect.forEach(callback => callback());
// })
// .catch((error) => {
// console.error("Error starting SignalR connection:", error);
// });
// this.socket.addEventListener('message', (event) => {
// const data: socketResponse = JSON.parse(event.data)
// this.connection.on("ReceiveMessage", (message) => {
// const data: any = JSON.parse(message)
// console.log("ReceiveMessage", data)
// this.callbacks.forEach(callback => callback(data));
// });
// })
// this.socket.addEventListener('close', (event) => {
// console.log('WebSocket connection closed');
// this.connection.onclose((error) => {
// console.log('WebSocket connection closed..');
// this.isOpen = false;
// this.onDisconnect.forEach(callback => callback());
// // Attempt to reconnect after a delay
// setTimeout(() => {
// this.connect();
// }, 1000); // Adjust the delay as needed
// if(this.stop == false) {
// setTimeout(() => {
// this.connect();
// }, 1000); // Adjust the delay as needed
// }
// });
// }
// send(message) {
// if (this.isOpen) {
// this.socket.send(message);
// } else {
// console.error('WebSocket connection is not open. Unable to send message.');
// }
// }
// close() {
// if (this.isOpen) {
// this.socket.close();
// disconnect() {
// this.stop = true
// if(this.isOpen == true) {
// this.connection.stop()
// .then(() => {
// console.log('WebSocket connection was closed by client');
// this.isOpen = false;
// this.onDisconnect.forEach(callback => callback());
// console.log("SignalR connection stopped.");
// })
// .catch((error) => {
// console.error("Error stopping SignalR connection by client:", error);
// });
// }
// }
@@ -237,67 +155,95 @@ interface socketResponse {
// }
// }
// export class ObjectMergeNotification{
interface socketResponse {
// //socket = new ReconnectingWebSocket('ws://localhost:3002');
// callbacks: {[GUID: string]: Function} = {}
// runWatch = true
// CMAPIService: CMAPIService = window["CMAPIAPIRepository"]
index: string
Guid: string
IsCompleted: Boolean
}
class ReconnectingWebSocket {
// constructor() {
// // this.socket.onDisconnectCallback(()=> {
// // this.runWatch = true
// // this.watch()
// // })
private url: string
private socket
isOpen: boolean
private callbacks: Function[] = []
private onDisconnect: Function[] = []
private onConnect: Function[] = []
private stop = true
http: HttpClient = window["http"]
// // this.socket.onConnectCallback(()=> {
// // this.runWatch = false
// // })
constructor(url) {
this.url = url;
this.socket = null;
this.isOpen = false;
this.connect();
}
// // this.socket.subscribe((data: socketResponse) => {
// // if(data.IsCompleted == true) {
// // this.callbacks[data.Guid](data)
// // delete this.callbacks[data.Guid]
// // }
// // })
connect() {
this.socket = new WebSocket(this.url);
// this.watch()
// }
this.socket.addEventListener('open', (event) => {
this.isOpen = true;
console.log('WebSocket connection established');
// async watch() {
// if(this.runWatch) {
// setTimeout(async ()=> {
// for(const [key, funx] of Object.entries(this.callbacks)) {
// Example: Send a message to the server
this.socket.send('Hello, WebSocket Server!');
this.onConnect.forEach(callback => callback());
});
// const request = await this.CMAPIService.getVideoHeader(key)
this.socket.addEventListener('message', (event) => {
const data: socketResponse = JSON.parse(event.data)
this.callbacks.forEach(callback => callback(data));
});
// if(request.isOk()) {
// funx()
// delete this.callbacks[key]
// }
// }
this.socket.addEventListener('close', (event) => {
console.log('WebSocket connection closed');
this.isOpen = false;
this.onDisconnect.forEach(callback => callback());
// Attempt to reconnect after a delay
if(this.stop == false) {
setTimeout(() => {
this.connect();
}, 1000); // Adjust the delay as needed
}
});
}
// this.watch()
// }, 1000)
send(message) {
if (this.isOpen) {
this.socket.send(message);
} else {
console.error('WebSocket connection is not open. Unable to send message.');
}
}
disconnect() {
this.stop = true
if (this.isOpen) {
this.isOpen = false;
this.socket.close();
}
}
// }
// }
subscribe(callback) {
this.callbacks.push(callback);
}
// subscribe(GUID, callback:Function) {
// this.callbacks[GUID] = callback;
// }
// unsubscribe(GUID) {
// delete this.callbacks[GUID]
// }
// }
unsubscribe(callback) {
this.callbacks = this.callbacks.filter(cb => cb !== callback);
}
onDisconnectCallback(callback) {
this.onDisconnect.push(callback)
}
onConnectCallback(callback) {
this.onConnect.push(callback)
}
}
export class ObjectMergeNotification{
socket = new ReconnectingWebSocketSignalR()
socket = new ReconnectingWebSocket('ws://localhost:3002');
callbacks: {[GUID: string]: Function} = {}
runWatch = true
CMAPIService: CMAPIService = window["CMAPIAPIRepository"]
@@ -311,32 +257,25 @@ export class ObjectMergeNotification{
})
this.socket.onConnectCallback(()=> {
console.log("open trigger")
this.runWatch = false
})
this.socket.subscribe((data: socketResponse) => {
if(data.IsCompleted == true) {
console.log("==================!!!====================")
this.callbacks[data.Guid](data)
delete this.callbacks[data.Guid]
try {
this.callbacks[data.Guid](data)
delete this.callbacks[data.Guid]
} catch (error) {}
} else {
console.log("else", data)
}
})
this.socket.connect();
this.watch()
}
close() {
this.socket.disconnect();
this.watchCount = 0;
this.runWatch = false
}
async watch() {
this.watchCount = 0;
@@ -368,6 +307,12 @@ export class ObjectMergeNotification{
}
}
close() {
this.socket.disconnect();
this.watchCount = 0;
this.runWatch = false
}
subscribe(GUID, callback:Function) {
this.callbacks[GUID] = callback;
}
@@ -377,3 +322,89 @@ export class ObjectMergeNotification{
}
}
// export class ObjectMergeNotification{
// socket = new ReconnectingWebSocketSignalR()
// callbacks: {[GUID: string]: Function} = {}
// runWatch = true
// CMAPIService: CMAPIService = window["CMAPIAPIRepository"]
// watchCount = 0
// constructor() {
// this.socket.onDisconnectCallback(()=> {
// console.log("run watch")
// this.runWatch = true
// this.watch()
// })
// this.socket.onConnectCallback(()=> {
// console.log("open trigger")
// this.runWatch = false
// })
// this.socket.subscribe((data: socketResponse) => {
// if(data.IsCompleted == true) {
// console.log("==================!!!====================")
// try {
// this.callbacks[data.Guid](data)
// delete this.callbacks[data.Guid]
// } catch (error) {}
// } else {
// console.log("else", data)
// }
// })
// this.socket.connect();
// this.watch()
// }
// close() {
// this.socket.disconnect();
// this.watchCount = 0;
// this.runWatch = false
// }
// async watch() {
// this.watchCount = 0;
// if(this.runWatch) {
// setTimeout(async () => {
// for(const [key, funx] of Object.entries(this.callbacks)) {
// const request = await this.CMAPIService.getVideoHeader(key)
// if(request.isOk()) {
// funx()
// delete this.callbacks[key]
// }
// }
// this.watchCount++
// if(this.watchCount <= 15) {
// this.watch()
// } else {
// this.runWatch = false
// }
// }, 1000)
// } else {
// console.log("end loop============================")
// }
// }
// subscribe(GUID, callback:Function) {
// this.callbacks[GUID] = callback;
// }
// unsubscribe(GUID) {
// delete this.callbacks[GUID]
// }
// }