從我收到的序列化的數據,一旦數據被反序列化我的客戶機/服務器,它進入一個命令處理程序,其中receivedData.Action
是ClientMessage
:處理客戶端/服務器消息?
Command._handlers[receivedData.Action].Handle(receivedData.Profile);
的命令處理程序將制定出客戶端消息並返回響應應該給予客戶。
我對客戶端的消息如下的枚舉:
public enum ClientMessage
{
INIT = 1,
NEW_PROFILE,
UPDATE_PROFILE_EMAIL,
UPDATE_PROFILE_PASSWORD,
UPDATE_PROFILE_PHONE,
UPDATE_PROFILE_DATE,
UPDATE_PROFILE_SECRET_ANSWER,
UPDATE_PROFILE_POSTAL_CODE,
UPDATE_SUCCESS,
PING,
PONG,
QUIT
}
什麼,我有困難的是如何有書面的所有動作,例如:
- 我應該有一個將客戶端發送的內容與另一個服務器應該回復的內容分開枚舉?
- 或者我應該有一個枚舉所有消息,並按要求按照它?
- 或者我應該如何去定義消息並處理它?
這是我的服務器/客戶端目前只給你一個更好的視野:
- Server啓動
- 客戶端連接
- 客戶端發送身份驗證服務器
- 服務器驗證客戶端併發送連接的批准消息
- 客戶端將從那裏開始發送和更新配置文件到服務器
這僅僅是一個例子。
IPacketHandler
public interface IPacketHandler
{
MyCommunicationData Handle(ProfileData profile);
}
命令
public class Command
{
public static Dictionary<ClientMessage, IPacketHandler> _handlers = new Dictionary<ClientMessage, IPacketHandler>()
{
{ClientMessage.INIT, new Init()},
{ClientMessage.NEW_PROFILE, new NewProfile()},
{ClientMessage.UPDATE_PROFILE_EMAIL, new UpdateEmail()},
{ClientMessage.UPDATE_PROFILE_PASSWORD, new UpdatePassword()},
{ClientMessage.UPDATE_PROFILE_PHONE, new UpdatePhone()},
{ClientMessage.UPDATE_PROFILE_DATE, new UpdateDate()},
{ClientMessage.UPDATE_PROFILE_SECRET_ANSWER, new UpdateSecretAnswer()},
{ClientMessage.UPDATE_PROFILE_POSTAL_CODE, new UpdatePostalCode()},
{ClientMessage.UPDATE_SUCCESS, new Success()},
{ClientMessage.PING, new Ping()},
{ClientMessage.PONG, new Pong()},
{ClientMessage.QUIT, new Quit()},
};
}
實例的INIT的
public class Init : IPacketHandler
{
public MyCommunicationData Handle(ProfileData profile)
{
// Some verification to auth the client here
// bla bla
// return response
return new MyCommunicationData() { Action = ClientMessage.CONNECTED };
}
}
PS:如果我的標題是關閉的,你有更好的建議,讓我知道,或者如果你可以繼續並更新它,但我不確定如何用英語來描述這一點。
我不會在客戶端 - 服務器上標記這個問題,它必須做更多的面向對象的設計比客戶端服務器。 – kabaros