private OperationResponse HandleOperationLeaveChatChannel(OperationRequest operationRequest) { var operation = new LeaveChannel(this.Protocol, operationRequest); if (!operation.IsValid) { return new OperationResponse(operationRequest.OperationCode) { ReturnCode = (short)ResultCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() } } ; Channel channel; if (channels.TryGetValue(operation.ChannelId, out channel)) { ChatSession session; if (chat.SessionCache.TryGetSessionBySessionId(operation.SessionId, out session)) { channel.Leave(session); } } return(null); } #endregion }
public async Task Process(LeaveChannel leaveChannel) { if (!IsLoggedIn) { return; } Channel channel; if (state.Rooms.TryGetValue(leaveChannel.ChannelName, out channel)) { User user; if (channel.Users.TryRemove(Name, out user)) { var users = channel.Users.Keys.ToArray(); await SendCommand(new ChannelUserRemoved() { ChannelName = channel.Name, UserName = Name }); await state.Broadcast(users, new ChannelUserRemoved() { ChannelName = channel.Name, UserName = Name }); } } }
void HandleLeaveChannel(LeaveChannel packet) { if (string.IsNullOrEmpty(packet.ChannelName) && packet.ZoneChannelID == 0) { return; } AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(GetPlayer().GetZoneId()); if (packet.ZoneChannelID != 0) { ChatChannelsRecord channel = CliDB.ChatChannelsStorage.LookupByKey(packet.ZoneChannelID); if (channel == null) { return; } if (zone == null || !GetPlayer().CanJoinConstantChannelInZone(channel, zone)) { return; } } ChannelManager cMgr = ChannelManager.ForTeam(GetPlayer().GetTeam()); if (cMgr != null) { Channel channel = cMgr.GetChannel((uint)packet.ZoneChannelID, packet.ChannelName, GetPlayer(), true, zone); if (channel != null) { channel.LeaveChannel(GetPlayer(), true); } if (packet.ZoneChannelID != 0) { cMgr.LeftChannel((uint)packet.ZoneChannelID, zone); } else { cMgr.LeftChannel(packet.ChannelName); } } }
public async Task Process(LeaveChannel leaveChannel) { if (!IsLoggedIn) { return; } Channel channel; if (server.Channels.TryGetValue(leaveChannel.ChannelName, out channel)) { User user; var users = !channel.IsDeluge ? channel.Users.Keys.ToList() : channel.Users.Keys.Where(x => server.CanUserSee(x, Name)).ToList(); if (channel.Users.TryRemove(Name, out user)) { await server.Broadcast(users, new ChannelUserRemoved() { ChannelName = channel.Name, UserName = Name }); } } }
private async Task LeaveChannel(LeaveChannel msg) { if (!_ChannelActors.ContainsKey(msg.ChannelName)) { return; } var actor = _ChannelActors[msg.ChannelName]; await actor.GracefulStop(TimeSpan.FromSeconds(10)); var config = _ChannelConfigurationActor.Ask <ChannelConfiguration>(new GetConfigurationForChannel(msg.ChannelName)).GetAwaiter().GetResult(); if (config.ConnectedToChannel) { config.ConnectedToChannel = false; _ChannelConfigurationActor.Tell(new SaveConfigurationForChannel(msg.ChannelName, config)); } Logger.Log(Akka.Event.LogLevel.InfoLevel, $"Actor for channel '{msg.ChannelName}' has been stopped."); _ChannelActors.Remove(msg.ChannelName); _FollowerActor.Tell(new StopTrackingFollowers(msg.ChannelName, "")); }