/// <summary>
        /// Is called when the voting receiver receives a message
        /// </summary>
        private void OnVoteReceiverMessage(object sender, OnMessageArgs e)
        {
            if (!voteRunning)
            {
                return;
            }

            if (permittedUsernames.Length > 0)
            {
                bool found = false;

                foreach (string name in permittedUsernames)
                {
                    // both have already been lowered in other methods, so this comparison is always case-insensitive
                    if (name == e.Username)
                    {
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    return;
                }
            }

            for (int i = 0; i < activeVoteOptions.Count; i++)
            {
                var voteOption = activeVoteOptions[i];

                if (voteOption.Matches.Contains(e.Message))
                {
                    int previousVote;

                    // Check if the player has already voted
                    if (!userVotedFor.TryGetValue(e.ClientId, out previousVote))
                    {
                        // If they haven't voted, count his vote
                        userVotedFor.Add(e.ClientId, i);
                        voteOption.Votes++;
                    }
                    else if (previousVote != i)
                    {
                        // If the player has already voted, and it's not the same as before,
                        // remove the old vote, and add the new one.
                        userVotedFor.Remove(e.ClientId);
                        activeVoteOptions[previousVote].Votes--;

                        userVotedFor.Add(e.ClientId, i);
                        voteOption.Votes++;
                    }

                    break;
                }
            }
        }
 private void ISCServer_OnMessage(object s, OnMessageArgs e)
 {
     if (e.ID == 99)
     {
         int charid = BitConverter.ToInt32(e.Data, 0);
         foreach (Client c in Program.zoneServer.Clients)
         {
             if (c.Character.Id == charid)
             {
                 Console.ForegroundColor = ConsoleColor.Red;
                 Console.WriteLine("Unauthorized access detected: \r\nCharacterID: " + charid);
                 Console.WriteLine("From IP: " + c.TcpIP);
                 Console.ForegroundColor = ConsoleColor.Gray;
                 Program.zoneServer.DisconnectClient(c);
                 break;
             }
         }
     }
 }
Example #3
0
 private void ISCServer_OnMessage(object s, OnMessageArgs e)
 {
     if (e.ID == 99)
     {
         int charid = BitConverter.ToInt32(e.Data, 0);
         foreach (Client c in Program.zoneServer.Clients)
         {
             if (c.Character.Id == charid)
             {
                 Console.ForegroundColor = ConsoleColor.Red;
                 Console.WriteLine("Unauthorized access detected: \r\nCharacterID: " + charid);
                 Console.WriteLine("From IP: " + c.TcpIP);
                 Console.ForegroundColor = ConsoleColor.Gray;
                 Program.zoneServer.DisconnectClient(c);
                 break;
             }
         }
     }
 }
        /// <summary>
        /// Is called when the voting receiver receives a message
        /// </summary>
        private void OnVoteReceiverMessage(object sender, OnMessageArgs e)
        {
            if (!voteRunning)
            {
                return;
            }

            for (int i = 0; i < activeVoteOptions.Count; i++)
            {
                var voteOption = activeVoteOptions[i];

                if (voteOption.Matches.Contains(e.Message))
                {
                    int previousVote;

                    // Check if the player has already voted
                    if (!userVotedFor.TryGetValue(e.ClientId, out previousVote))
                    {
                        // If they haven't voted, count his vote
                        userVotedFor.Add(e.ClientId, i);
                        voteOption.Votes++;
                    }
                    else if (previousVote != i)
                    {
                        // If the player has already voted, and it's not the same as before,
                        // remove the old vote, and add the new one.
                        userVotedFor.Remove(e.ClientId);
                        activeVoteOptions[previousVote].Votes--;

                        userVotedFor.Add(e.ClientId, i);
                        voteOption.Votes++;
                    }

                    break;
                }
            }
        }
 /// <summary>
 /// </summary>
 /// <param name="request">
 /// </param>
 /// <param name="onMessageArgs">
 /// </param>
 private void ClientMessage(object request, OnMessageArgs onMessageArgs)
 {
     this.MessageReceived(request, onMessageArgs);
 }
 /// <summary>
 /// </summary>
 /// <param name="request">
 /// </param>
 /// <param name="onMessageArgs">
 /// </param>
 private void ClientMessage(HandleClientRequest request, OnMessageArgs onMessageArgs)
 {
     this.MessageReceived(request, onMessageArgs);
 }
 /// <summary>
 /// </summary>
 /// <param name="request">
 /// </param>
 /// <param name="onMessageArgs">
 /// </param>
 private void ClientMessage(object request, OnMessageArgs onMessageArgs)
 {
     this.MessageReceived(request, onMessageArgs);
 }
Example #8
0
        /// <summary>
        /// Handler
        /// </summary>
        /// <param name="s">
        /// </param>
        /// <param name="a">
        /// </param>
        private void ISCClient_OnMessage(object s, OnMessageArgs a)
        {
            Console.WriteLine("[ISComm] Packet '" + a.ID + "' catched.");
            switch (a.ID)
            {
            case 0x0F:
            {
                MemoryStream stream = new MemoryStream(a.Data);
                BinaryReader reader = new BinaryReader(stream);

                uint   senderId        = reader.ReadUInt32();
                byte   msgType         = reader.ReadByte();
                short  receiversAmount = reader.ReadInt16();
                uint[] receivers       = new uint[receiversAmount];

                for (int i = 0; i < receiversAmount; i++)
                {
                    receivers[i] = reader.ReadUInt32();
                }

                string msg = reader.ReadString();
                stream.Close();
                reader.Close();

                string lookup = string.Empty;
                foreach (Client cli in this.server.Clients)
                {
                    if (cli.Character.characterId == senderId)
                    {
                        lookup = cli.Character.characterName;
                    }
                }

                byte[] namelookup = NameLookupResult.Create(senderId, lookup);

                Console.WriteLine("Got chat from ZoneEngine: " + msg);
                byte[] packet = MsgVicinity.Create(senderId, msg, msgType);

                foreach (uint sendto in receivers)
                {
                    foreach (Client cli in this.server.Clients)
                    {
                        if (cli.Character.characterId == sendto)
                        {
                            if (!cli.KnownClients.Contains(senderId))
                            {
                                cli.Send(namelookup);         // sending a namelookup ahead of the message
                                cli.KnownClients.Add(senderId);
                            }

                            cli.Send(packet);
                        }
                    }
                }
            }

            break;

            // Add characters to Team chat channel
            case 0xF0:
                PacketReader packetReader = new PacketReader(ref a.Data);

                List <uint> charIds       = new List <uint>();
                uint        numberofchars = packetReader.ReadUInt32();
                while (numberofchars > 0)
                {
                    charIds.Add(packetReader.ReadUInt32());
                }
                uint[] chars = charIds.ToArray();

                // Commented out to remove compile error.
                // Lists.ChatChannels.CreateTeamChannel(NextTeamId(),chars);


                break;
            }
        }
Example #9
0
        protected virtual async Task Tick(IChannel clientChannel)
        {
            if (clientChannel == null)
            {
                return;
            }

            //
            List <BaseScertMessage> responses = new List <BaseScertMessage>();
            string key = clientChannel.Id.AsLongText();

            try
            {
                //
                if (_channelDatas.TryGetValue(key, out var data))
                {
                    // Destroy
                    if (data.ShouldDestroy)
                    {
                        _forceDisconnectQueue.Enqueue(clientChannel);
                        return;
                    }

                    // Ignore
                    if (data.Ignore)
                    {
                        return;
                    }

                    // Process all messages in queue
                    while (data.RecvQueue.TryDequeue(out var message))
                    {
                        try
                        {
                            // Send to plugins
                            var onMsg = new OnMessageArgs()
                            {
                                Player  = data.ClientObject,
                                Message = message,
                                Channel = clientChannel
                            };
                            Program.Plugins.OnEvent(Plugins.PluginEvent.MEDIUS_ON_RECV, onMsg);

                            // Ignore if ignored
                            if (!onMsg.Ignore)
                            {
                                await ProcessMessage(message, clientChannel, data);
                            }
                        }
                        catch (Exception e)
                        {
                            Logger.Error(e);
                            Logger.Error($"FORCE DISCONNECTING CLIENT 1 {data} || {data.ClientObject}");
                            _           = ForceDisconnectClient(clientChannel);
                            data.Ignore = true;
                        }
                    }

                    // Send if writeable
                    if (clientChannel.IsWritable)
                    {
                        // Add send queue to responses
                        while (data.SendQueue.TryDequeue(out var message))
                        {
                            // Send to plugins
                            var onMsg = new OnMessageArgs()
                            {
                                Player  = data.ClientObject,
                                Channel = clientChannel,
                                Message = message
                            };
                            Program.Plugins.OnEvent(Plugins.PluginEvent.MEDIUS_ON_SEND, onMsg);

                            // Ignore if ignored
                            if (!onMsg.Ignore)
                            {
                                responses.Add(message);
                            }
                        }

                        if (data.ClientObject != null)
                        {
                            // Echo
                            if ((DateTime.UtcNow - data.ClientObject.UtcLastServerEchoSent).TotalSeconds > Program.Settings.ServerEchoInterval)
                            {
                                data.ClientObject.QueueServerEcho();
                            }

                            // Add client object's send queue to responses
                            while (data.ClientObject.SendMessageQueue.TryDequeue(out var message))
                            {
                                // Send to plugins
                                var onMsg = new OnMessageArgs()
                                {
                                    Player  = data.ClientObject,
                                    Message = message,
                                    Channel = clientChannel
                                };
                                Program.Plugins.OnEvent(Plugins.PluginEvent.MEDIUS_ON_SEND, onMsg);

                                // Ignore if ignored
                                if (!onMsg.Ignore)
                                {
                                    responses.Add(message);
                                }
                            }
                        }

                        //
                        if (responses.Count > 0)
                        {
                            _ = clientChannel.WriteAndFlushAsync(responses);
                        }
                    }
                }
                else
                {
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                _forceDisconnectQueue.Enqueue(clientChannel);
                //await DisconnectClient(clientChannel);
            }
        }
Example #10
0
 private Task HandleAsync(OnMessageArgs message, CancellationToken stoppingToken) => commandDispatcher.DispatchAsync(message, stoppingToken);
        /// <summary>
        /// Handler
        /// </summary>
        /// <param name="s">
        /// </param>
        /// <param name="a">
        /// </param>
        private void ISCClient_OnMessage(object s, OnMessageArgs a)
        {
            Console.WriteLine("[ISComm] Packet '" + a.ID + "' catched.");
            switch (a.ID)
            {
                case 0x0F:
                    {
                        MemoryStream stream = new MemoryStream(a.Data);
                        BinaryReader reader = new BinaryReader(stream);

                        uint senderId = reader.ReadUInt32();
                        byte msgType = reader.ReadByte();
                        short receiversAmount = reader.ReadInt16();
                        uint[] receivers = new uint[receiversAmount];

                        for (int i = 0; i < receiversAmount; i++)
                        {
                            receivers[i] = reader.ReadUInt32();
                        }

                        string msg = reader.ReadString();
                        stream.Close();
                        reader.Close();

                        string lookup = string.Empty;
                        foreach (Client cli in this.server.Clients)
                        {
                            if (cli.Character.characterId == senderId)
                            {
                                lookup = cli.Character.characterName;
                            }
                        }

                        byte[] namelookup = NameLookupResult.Create(senderId, lookup);

                        Console.WriteLine("Got chat from ZoneEngine: " + msg);
                        byte[] packet = MsgVicinity.Create(senderId, msg, msgType);

                        foreach (uint sendto in receivers)
                        {
                            foreach (Client cli in this.server.Clients)
                            {
                                if (cli.Character.characterId == sendto)
                                {
                                    if (!cli.KnownClients.Contains(senderId))
                                    {
                                        cli.Send(namelookup); // sending a namelookup ahead of the message
                                        cli.KnownClients.Add(senderId);
                                    }

                                    cli.Send(packet);
                                }
                            }
                        }
                    }

                    break;

                    // Add characters to Team chat channel
                case 0xF0:
                    PacketReader packetReader = new PacketReader(ref a.Data);

                    List<uint> charIds = new List<uint>();
                    uint numberofchars = packetReader.ReadUInt32();
                    while (numberofchars>0)
                    {
                        charIds.Add(packetReader.ReadUInt32());
                    }
                    uint[] chars = charIds.ToArray();

                    // Commented out to remove compile error.
                    // Lists.ChatChannels.CreateTeamChannel(NextTeamId(),chars);


                    break;
            }
        }
 /// <summary>
 /// </summary>
 /// <param name="request">
 /// </param>
 /// <param name="onMessageArgs">
 /// </param>
 private void ClientMessage(HandleClientRequest request, OnMessageArgs onMessageArgs)
 {
     this.MessageReceived(request, onMessageArgs);
 }