从我收到的序列化的数据,一旦数据被反序列化我的客户机/服务器,它进入一个命令处理程序,其中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