NettyChat

weixin_34249678發表於2016-09-17

命令設計以及格式

| comType | id (用來標記命令) |

表示命令型別, 剩下的不同命令格式不同

CREATE_ACCOUNT

格式: | username | password |

操作: USER中新增一條目

CHANGE_PASSWORD

| username | oldpassword | newpassword |

LOGIN

格式: | username | password |

操作: 判斷ChannelInfo中的UserInfo是否為null, 如果不是null則已登入, 如果是null, 則從資料庫查詢出User資訊, 然後為ChannelInfo中的UserInfo賦值

LOGOUT

操作: 與LOGIN相反

EXIT

ADD_CONTACT_INVITE 新增好友請求

格式: | username | contactName |

操作:

  1. 先判斷被邀請者是否存在
  2. 再判斷被邀請者是否已經是好友
  3. 如果不是好友 , 向CONTACTS表寫一條記錄
  4. 如果被邀請者現在已登入, 則向將傳送AddContactInviteCmd

ADD_CONTACT_RESPONSE

格式: | username | contactName | isAccepted |

操作: 當收到其它使用者的好友請求時, 可以利用該命令接收請求

  1. 判斷Contact表中是否有一個PENDING requets

REMOVE_CONTACT

| contactName |

GET_CONTACT_OF_USERS 該命令是什麼含義

| contactState |

GET_CONTACT_OF_USERS_RESPONSE

| usernames |

MESSAGE

| senderName | recipientName | message |

GET_PENGDING_MESSAGES

GET_PENGDING_MESSAGES_RESPONSE

| senders | messages |

SHUTDOWN_SERVER

OK

ERROR

| error_code | description |

保活機制

利用的IdleStateHandler, 在handler加入pipeline時, 往TaskQueue中新增相應的任務來觸發相關的WriteIdle或ReadIdle Event,該Event也是由使用者自己來處理