public MainMessage HandleMessage(MainMessage msg) { RoomMsg roomMsg = msg.RoomMsg; int serverId = 0; switch (roomMsg.MessageTypeCase) { case RoomMsg.MessageTypeOneofCase.RoomCreate: return(RoomCreate(msg.MsgId, msg.ClientId, msg)); case RoomMsg.MessageTypeOneofCase.RoomDetail: return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message.")); case RoomMsg.MessageTypeOneofCase.RoomEnter: serverId = _roomsPerServer.Where(x => x.Value.Find(y => y.Id == msg.RoomMsg.RoomEnter.RoomId) != null).FirstOrDefault().Key; if (serverId == 0) { return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Room with this ID could not be found.")); } return(ISystemService.CreateRedirectMessage(msg, _api.Services.System.GetAddressById((uint)serverId))); case RoomMsg.MessageTypeOneofCase.RoomExit: serverId = _roomsPerServer.Where(x => x.Value.Find(y => y.Id == msg.RoomMsg.RoomExit.RoomId) != null).FirstOrDefault().Key; if (serverId == 0) { return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Room with this ID could not be found.")); } return(ISystemService.CreateRedirectMessage(msg, _api.Services.System.GetAddressById((uint)serverId))); case RoomMsg.MessageTypeOneofCase.RoomList: if (msg.SenderIdCase == MainMessage.SenderIdOneofCase.ClientId) { return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message.")); } return(RoomListServer(msg.MsgId, (int)msg.ServerId, msg.RoomMsg.RoomList)); case RoomMsg.MessageTypeOneofCase.RoomQuery: switch (msg.RoomMsg.RoomQuery.RoomQueryCase) { case RoomQuery.RoomQueryOneofCase.RoomDetailId: return(RoomDetail(msg.MsgId, msg.RoomMsg.RoomQuery.RoomDetailId)); case RoomQuery.RoomQueryOneofCase.RoomListQuery: return(RoomListClient(msg.RoomMsg.RoomQuery.RoomListQuery)); default: return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message.")); } default: return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Invalid message.")); } }
public MainMessage HandleMessage(MainMessage msg) { if (msg.SenderIdCase == MainMessage.SenderIdOneofCase.ServerId) { return(HandleServerMessage(msg)); } else if (msg.UserMngMsg.UserMsg.UserRequestMsg.ListQuery != null) { return(HandleListRoomUsers(msg)); } return(ISystemService.CreateRedirectMessage(msg, _api.OpenAPI.Config.MainServer)); }
private MainMessage RoomCreate(ulong msgId, ulong clientId, MainMessage msg) { if (_roomsPerServer.Count == 0) { return(ISystemService.CreateErrorMessage(msgId, 0, 0, "There is currently no computing server.")); } int serverId = 1; foreach (KeyValuePair <int, List <Room> > pair in _roomsPerServer) { lock (_roomsPerServer[pair.Key]) { if (_api.Services.System.IsAlive((ulong)pair.Key) && pair.Value.Count < _roomsPerServer[serverId].Count) { serverId = pair.Key; } } } IPEndPoint redirect = _api.Services.System.GetAddressById((uint)serverId); return(ISystemService.CreateRedirectMessage(msg, redirect)); }