⚡ WebSocket Events API

ℹ️ اطلاعات: برای استفاده از WebSocket، باید از کتابخانه socket.io-client استفاده کنید. تمام Event ها به صورت Real-time و لحظه‌ای کار می‌کنند.

EMIT connect

اتصال به WebSocket Server

Connection Example:

const socket = io('https://coinceeper.com', {
  auth: {
    user_id: 'YOUR_USER_ID'
  },
  transports: ['websocket', 'polling']
});

socket.on('connect', () => {
  console.log('Connected!');
});

EMIT join_conversation

ورود به یک مکالمه

Data:

فیلدنوعتوضیحات
user_idstring (UUID)الزامی شناسه کاربر
conversation_idstring (UUID)الزامی شناسه مکالمه

Example:

socket.emit('join_conversation', {
  user_id: 'uuid',
  conversation_id: 'uuid'
});

ON Response:

socket.on('joined_conversation', (data) => {
  console.log('Joined:', data.conversation_id);
});

EMIT send_message

ارسال پیام لحظه‌ای

Data:

فیلدنوعتوضیحات
sender_idstring (UUID)الزامی شناسه فرستنده
receiver_idstring (UUID)الزامی شناسه گیرنده
messagestringالزامی متن پیام
message_typestringاختیاری نوع پیام (پیش‌فرض: text)

Example:

socket.emit('send_message', {
  sender_id: 'uuid',
  receiver_id: 'uuid',
  message: 'سلام!',
  message_type: 'text'
});

ON Response:

socket.on('new_message', (data) => {
  console.log('New message:', data);
  if (data.is_edited) {
    console.log('(edited)');
  }
});

EMIT typing_start

شروع تایپ (نمایش typing indicator)

Data:

فیلدنوعتوضیحات
user_idstring (UUID)الزامی شناسه کاربر
conversation_idstring (UUID)الزامی شناسه مکالمه

Example:

socket.emit('typing_start', {
  user_id: 'uuid',
  conversation_id: 'uuid'
});

ON Response:

socket.on('user_typing', (data) => {
  if (data.is_typing) {
    showTypingIndicator(data.user_id);
  } else {
    hideTypingIndicator(data.user_id);
  }
});

EMIT typing_stop

توقف تایپ (مخفی کردن typing indicator)

Data:

فیلدنوعتوضیحات
user_idstring (UUID)الزامی شناسه کاربر
conversation_idstring (UUID)الزامی شناسه مکالمه

Example:

socket.emit('typing_stop', {
  user_id: 'uuid',
  conversation_id: 'uuid'
});

EMIT edit_message

ویرایش پیام

Data:

فیلدنوعتوضیحات
user_idstring (UUID)الزامی شناسه کاربر (باید فرستنده باشد)
message_idstring (UUID)الزامی شناسه پیام
messagestringالزامی متن جدید پیام

Example:

socket.emit('edit_message', {
  user_id: 'uuid',
  message_id: 'uuid',
  message: 'پیام ویرایش شده'
});

ON Response:

socket.on('message_edited', (data) => {
  updateMessageInUI(data);
});

EMIT delete_message

حذف پیام

Data:

فیلدنوعتوضیحات
user_idstring (UUID)الزامی شناسه کاربر (باید فرستنده باشد)
message_idstring (UUID)الزامی شناسه پیام

Example:

socket.emit('delete_message', {
  user_id: 'uuid',
  message_id: 'uuid'
});

ON Response:

socket.on('message_deleted', (data) => {
  removeMessageFromUI(data.message_id);
});

ON error

دریافت خطا از سرور

Example:

socket.on('error', (data) => {
  console.error('Error:', data.message);
});

📝 مثال کامل استفاده:

import io from 'socket.io-client';

const socket = io('https://coinceeper.com', {
  auth: { user_id: 'YOUR_USER_ID' }
});

socket.on('connect', () => {
  socket.emit('join_conversation', {
    user_id: 'USER_ID',
    conversation_id: 'CONVERSATION_ID'
  });
});

socket.on('new_message', (data) => {
  displayMessage(data);
  if (data.is_edited) {
    showEditedTag(data.message_id);
  }
});

socket.on('user_typing', (data) => {
  if (data.is_typing) {
    showTypingAnimation(data.user_id);
  } else {
    hideTypingAnimation(data.user_id);
  }
});

const input = document.getElementById('message-input');
input.addEventListener('input', () => {
  socket.emit('typing_start', {
    user_id: 'USER_ID',
    conversation_id: 'CONVERSATION_ID'
  });
  
  clearTimeout(typingTimeout);
  typingTimeout = setTimeout(() => {
    socket.emit('typing_stop', {
      user_id: 'USER_ID',
      conversation_id: 'CONVERSATION_ID'
    });
  }, 1000);
});