socketInit method
dynamic
socketInit()
Implementation
socketInit() {
updateuseraccount();
// Socket.IO'ya bağlanma
socket = socketio.io('http://socket.armoyu.com:2020', <String, dynamic>{
// socket = IO.io('http://10.0.2.2:2020', <String, dynamic>{
'transports': ['websocket'],
'autoConnect': true,
});
startPing(const Duration(seconds: 2));
// Ping değerini güncelle
socket.on('ping', (data) {
// Burada data yerine ping zamanı verilmez.
pingValue.value = data; // Bu satırda hata var
log('${socketPREFIX}Ping: ${pingValue.value} ms'); // Log ile göster
});
// Pong mesajını dinle
socket.on('pong', (data) {
// data içinde ping ID'sini al
String pingId = data['id'];
if (pingId != pingID.value) {
log("PING ID eşleşmedi: Beklenen ${pingID.value}, gelen $pingId");
return;
}
DateTime pongReceivedTime = DateTime.now(); // Pong zamanı
if (lastPingTime != null) {
// Ping süresini hesapla
pingValue.value =
pongReceivedTime.difference(lastPingTime!).inMilliseconds;
// log('Pong yanıtı alındı: $pingId');
log('Ping süresi: ${pingValue.value} ms');
}
});
//WEBRTC
// 'offer' olayını dinle
socket.on('offer', (data) async {
if (kDebugMode) {
print('Received offer');
}
WidgetsBinding.instance.addPostFrameCallback((_) {
// Burada arama popup'ı açılabilir
PopupWidget.showIncomingCallDialog(
callerName: data['calling']['name'],
callerAvatarUrl: data['calling']['image'],
onAccept: () async {
triggerCallingAccept(
data['calling']['id'],
data['calling']['name'],
data['calling']['image'],
);
if (data is Map<String, dynamic>) {
var offer = webrtc.RTCSessionDescription(
data['offer']['sdp'], // SDP verisini al
data['offer']['type'], // Offer veya Answer tipi
);
//teklif geliyor ve kabul ediyoruz peerConnection oluşturuyoruz
await webRTCinit(restoresystem: true);
// Peer connection'ı remote description olarak ayarlıyoruz
peerConnection!.setRemoteDescription(offer).then((_) {
// Remote description ayarlandıktan sonra cevabı oluştur
createAnswer(offer);
}).catchError((e) {
if (kDebugMode) {
print("Error setting remote description: $e");
}
});
}
},
onDecline: () {
if (kDebugMode) {
print("Arama reddedildi");
}
},
);
});
});
// 'answer' olayını dinle
socket.on('answer', (data) async {
if (kDebugMode) {
print('Received answer');
}
var answer = webrtc.RTCSessionDescription(
data['sdp'], // SDP verisini al
data['type'], // Offer veya Answer tipi
);
// Gelen "answer"ı remote description olarak ayarlıyoruz
try {
await peerConnection!.setRemoteDescription(answer);
} catch (e) {
if (kDebugMode) {
print("Error setting remote description for answer: $e");
}
}
});
socket.on('candidate', (data) async {
if (kDebugMode) {
print('Received candidate: $data');
}
var candidate = webrtc.RTCIceCandidate(
data['candidate'],
data['sdpMid'],
data['sdpMLineIndex'],
);
// Gelen candidate'ı peer connection'a ekliyoruz
try {
await peerConnection!.addCandidate(candidate);
} catch (e) {
if (kDebugMode) {
print("Error adding candidate: $e");
}
}
});
//WEBRTC
socket.on('signaling', (data) {
// Signaling verilerini dinleme
log('Signaling verisi alındı: $data');
});
socket.on('INCOMING_CALL', (data) {
// Signaling verilerini dinleme
log('Kullanıcı Seni Arıyor: ${data['callerId']}');
isCallingMe.value = true;
whichuserisCallingMe.value = data['callerId'];
});
socket.on('CALL_ACCEPTED', (data) {
// Signaling verilerini dinleme
log('Çağrı kabul edildi: $data');
});
socket.on('CALL_CLOSED', (data) {
// Signaling verilerini dinleme
log('Çağrı reddedildi: $data');
});
// Başka biri bağlandığında bildiri al
socket.on('userConnected', (data) {
if (data != null) {
log(socketPREFIX + data.toString());
}
log(socketPREFIX + data.toString());
});
// Bağlantı başarılı olduğunda
socket.on('connect', (data) {
log('${socketPREFIX}Bağlandı');
if (data != null) {
log(socketPREFIX + data.toString());
}
socketChatStatus.value = true;
// Kullanıcıyı kaydet
registerUser(currentUserAccounts.value.user.value);
});
// Bağlantı kesildiğinde
socket.on('disconnect', (data) {
try {
log('$socketPREFIX$data');
} catch (e) {
log('${socketPREFIX}Hata (disconnect): $e');
}
log('${socketPREFIX}Bağlantı kesildi');
socketChatStatus.value = false;
});
// Sunucudan gelen mesajları dinleme
socket.on('chat', (data) {
ChatMessage chatData = ChatMessage.fromJson(data);
log("$socketPREFIX${chatData.user.displayName} - ${chatData.messageContext}");
ChatMessage chat = ChatMessage(
messageID: 0,
messageContext: chatData.messageContext,
user: User(
displayName: chatData.user.displayName,
avatar: chatData.user.avatar,
),
isMe: false,
);
Chat chatINFO = Chat(
user: chatData.user,
chatNotification: true.obs,
lastmessage: chat.obs,
messages: Rxn([chat]),
chatType: APIChat.ozel,
);
triggerChatUpdated(chatINFO); // Güncellenmiş sohbeti tetikle
});
// Otomatik olarak bağlanma
socket.connect();
return this;
}