internal StreamEventsSlice(SliceReadStatus status, 
                                   string stream, 
                                   int fromEventNumber, 
                                   ReadDirection readDirection,
                                   ClientMessage.ResolvedIndexedEvent[] events,
                                   int nextEventNumber,
                                   int lastEventNumber,
                                   bool isEndOfStream)
        {
            Ensure.NotNullOrEmpty(stream, "stream");

            Status = status;
            Stream = stream;
            FromEventNumber = fromEventNumber;
            ReadDirection = readDirection;
            if (events == null || events.Length == 0)
                Events = Empty.ResolvedEvents;
            else
            {
                Events = new ResolvedEvent[events.Length];
                for (int i = 0; i < Events.Length; ++i)
                {
                    Events[i] = new ResolvedEvent(events[i]);
                }
            }
            NextEventNumber = nextEventNumber;
            LastEventNumber = lastEventNumber;
            IsEndOfStream = isEndOfStream;
        }
Esempio n. 2
0
        public static FeedElement ToAllEventsForwardFeed(ClientMessage.ReadAllEventsForwardCompleted msg, Uri requestedUrl, EmbedLevel embedContent)
        {
            var self = HostName.Combine(requestedUrl, "/streams/{0}", AllEscaped);
            var feed = new FeedElement();
            feed.SetTitle("All events");
            feed.SetId(self);
            feed.SetUpdated(msg.Events.Length > 0 ? msg.Events[msg.Events.Length - 1].Event.TimeStamp : DateTime.MinValue.ToUniversalTime());
            feed.SetAuthor(AtomSpecs.Author);

            feed.AddLink("self", self);
            feed.AddLink("first", HostName.Combine(requestedUrl, "/streams/{0}/head/backward/{1}", AllEscaped, msg.MaxCount));
            if (msg.CurrentPos.CommitPosition != 0)
            {
                feed.AddLink("last", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", AllEscaped, new TFPos(0, 0).AsString(), msg.MaxCount));
                feed.AddLink("next", HostName.Combine(requestedUrl, "/streams/{0}/{1}/backward/{2}", AllEscaped, msg.PrevPos.AsString(), msg.MaxCount));
            }
            if (!msg.IsEndOfStream || msg.Events.Length > 0)
                feed.AddLink("previous", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", AllEscaped, msg.NextPos.AsString(), msg.MaxCount));
            feed.AddLink("metadata", HostName.Combine(requestedUrl, "/streams/{0}/metadata", AllEscaped));
            for (int i = msg.Events.Length - 1; i >= 0; --i)
            {
                feed.AddEntry(
                    ToEntry(
                        new ResolvedEvent(msg.Events[i].Event, msg.Events[i].Link, msg.Events[i].ResolveResult),
                        requestedUrl, embedContent));
            }
            return feed;
        }
 public static void Encode(SimpleEntryView<IData, IData> dataEntryView, ClientMessage clientMessage)
 {
     var key = dataEntryView.GetKey();
     var value = dataEntryView.GetValue();
     var cost = dataEntryView.GetCost();
     var creationTime = dataEntryView.GetCreationTime();
     var expirationTime = dataEntryView.GetExpirationTime();
     var hits = dataEntryView.GetHits();
     var lastAccessTime = dataEntryView.GetLastAccessTime();
     var lastStoredTime = dataEntryView.GetLastStoredTime();
     var lastUpdateTime = dataEntryView.GetLastUpdateTime();
     var version = dataEntryView.GetVersion();
     var ttl = dataEntryView.GetTtl();
     var evictionCriteriaNumber = dataEntryView.GetEvictionCriteriaNumber();
     clientMessage.Set(key)
         .Set(value)
         .Set(cost)
         .Set(creationTime)
         .Set(expirationTime)
         .Set(hits)
         .Set(lastAccessTime)
         .Set(lastStoredTime)
         .Set(lastUpdateTime)
         .Set(version)
         .Set(evictionCriteriaNumber)
         .Set(ttl);
 }
        private void OnLoadStateReadRequestCompleted(ClientMessage.ReadStreamEventsBackwardCompleted message)
        {
            if (message.Events.Length > 0)
            {
                var checkpoint = message.Events.Where(v => v.Event.EventType == ProjectionEventTypes.ProjectionCheckpoint).Select(x => x.Event).FirstOrDefault();
                if (checkpoint != null)
                {
                    var parsed = checkpoint.Metadata.ParseCheckpointTagVersionExtraJson(_projectionVersion);
                    if (parsed.Version.ProjectionId != _projectionVersion.ProjectionId
                        || _projectionVersion.Epoch > parsed.Version.Version)
                    {
                        _lastWrittenCheckpointEventNumber = checkpoint.EventNumber;
                        CheckpointLoaded(null, null);
                    }
                    else
                    {
                        //TODO: check epoch and correctly set _lastWrittenCheckpointEventNumber
                        var checkpointData = Helper.UTF8NoBom.GetString(checkpoint.Data);
                        _lastWrittenCheckpointEventNumber = checkpoint.EventNumber;
                        var adjustedTag = parsed.Tag; // the same projection and epoch, handle upgrades internally
                        CheckpointLoaded(adjustedTag, checkpointData);
                    }
                    return;
                }
            }

            if (message.NextEventNumber != -1)
            {
                _nextStateIndexToRequest = message.NextEventNumber;
                RequestLoadState();
                return;
            }
            _lastWrittenCheckpointEventNumber = message.LastEventNumber;
            CheckpointLoaded(null, null);
        }
Esempio n. 5
0
        public static FeedElement ToStreamEventForwardFeed(ClientMessage.ReadStreamEventsForwardCompleted msg, Uri requestedUrl, EmbedLevel embedContent)
        {
            Ensure.NotNull(msg, "msg");

            string escapedStreamId = Uri.EscapeDataString(msg.EventStreamId);
            var self = HostName.Combine(requestedUrl, "/streams/{0}", escapedStreamId);
            var feed = new FeedElement();
            feed.SetTitle(string.Format("Event stream '{0}'", msg.EventStreamId));
            feed.StreamId = msg.EventStreamId;
            feed.SetId(self);
            feed.SetUpdated(msg.Events.Length > 0 && msg.Events[0].Event != null ? msg.Events[0].Event.TimeStamp : DateTime.MinValue.ToUniversalTime());
            feed.SetAuthor(AtomSpecs.Author);
            feed.SetHeadOfStream(msg.IsEndOfStream);

            var prevEventNumber = Math.Min(msg.FromEventNumber + msg.MaxCount - 1, msg.LastEventNumber) + 1;
            var nextEventNumber = msg.FromEventNumber - 1;

            feed.AddLink("self", self);
            feed.AddLink("first", HostName.Combine(requestedUrl, "/streams/{0}/head/backward/{1}", escapedStreamId, msg.MaxCount));
            if (nextEventNumber >= 0)
            {
                feed.AddLink("last", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", escapedStreamId, 0, msg.MaxCount));
                feed.AddLink("next", HostName.Combine(requestedUrl, "/streams/{0}/{1}/backward/{2}", escapedStreamId, nextEventNumber, msg.MaxCount));
            }
            if (!msg.IsEndOfStream || msg.Events.Length > 0)
                feed.AddLink("previous", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", escapedStreamId, prevEventNumber, msg.MaxCount));
            if (!escapedStreamId.StartsWith("$$"))
                feed.AddLink("metadata", HostName.Combine(requestedUrl, "/streams/{0}/metadata", escapedStreamId));
            for (int i = msg.Events.Length - 1; i >= 0; --i)
            {
                feed.AddEntry(ToEntry(msg.Events[i], requestedUrl, embedContent));
            }

            return feed;
        }
Esempio n. 6
0
        public static void HandlePacket(GameClientMessageHandler handler, ClientMessage message)
        {
            Console.ForegroundColor = ConsoleColor.DarkCyan;

            if (Incoming.ContainsKey(message.Id))
            {
                if (AzureEmulator.DebugMode)
                {
                    Console.WriteLine();
                    Console.Write("INCOMING ");
                    Console.ForegroundColor = ConsoleColor.DarkGreen;
                    Console.Write("HANDLED ");
                    Console.ForegroundColor = ConsoleColor.DarkGray;
                    Console.Write(message.Id + Environment.NewLine + message);
                    if (message.Length > 0)
                        Console.WriteLine();
                    Console.WriteLine();
                }

                StaticRequestHandler staticRequestHandler = Incoming[message.Id];
                staticRequestHandler(handler);
            }
            else if (AzureEmulator.DebugMode)
            {
                Console.WriteLine();
                Console.Write("INCOMING ");
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.Write("REFUSED ");
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.Write(message.Id + Environment.NewLine + message);
                if (message.Length > 0)
                    Console.WriteLine();
                Console.WriteLine();
            }
        }
Esempio n. 7
0
        public static FeedElement ToStreamEventBackwardFeed(ClientMessage.ReadStreamEventsBackwardCompleted msg, Uri requestedUrl, EmbedLevel embedContent, bool headOfStream)
        {
            Ensure.NotNull(msg, "msg");

            string escapedStreamId = Uri.EscapeDataString(msg.EventStreamId);
            var self = HostName.Combine(requestedUrl, "/streams/{0}", escapedStreamId);
            var feed = new FeedElement();
            feed.SetTitle(string.Format("Event stream '{0}'", msg.EventStreamId));
            feed.StreamId = msg.EventStreamId;
            feed.SetId(self);
            feed.SetUpdated(msg.Events.Length > 0 ? msg.Events[0].Event.TimeStamp : DateTime.MinValue.ToUniversalTime());
            feed.SetAuthor(AtomSpecs.Author);

            var prevEventNumber = Math.Min(msg.FromEventNumber, msg.LastEventNumber) + 1;
            var nextEventNumber = msg.FromEventNumber - msg.MaxCount;

            feed.AddLink("self", self);
            feed.AddLink("first", HostName.Combine(requestedUrl, "/streams/{0}/head/backward/{1}", escapedStreamId, msg.MaxCount));
            if (!msg.IsEndOfStream)
            {
                if (nextEventNumber < 0) throw new Exception(string.Format("nextEventNumber is negative: {0} while IsEndOfStream", nextEventNumber));
                feed.AddLink("last", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", escapedStreamId, 0, msg.MaxCount));
                feed.AddLink("next", HostName.Combine(requestedUrl, "/streams/{0}/{1}/backward/{2}", escapedStreamId, nextEventNumber, msg.MaxCount));
            }
            feed.AddLink("previous", HostName.Combine(requestedUrl, "/streams/{0}/{1}/forward/{2}", escapedStreamId, prevEventNumber, msg.MaxCount));
            feed.AddLink("metadata", HostName.Combine(requestedUrl, "/streams/{0}/metadata", escapedStreamId));
            for (int i = 0; i < msg.Events.Length; ++i)
            {
                feed.AddEntry(ToEntry(msg.Events[i], requestedUrl, embedContent));
            }

            return feed;
        }
Esempio n. 8
0
        private void ReadUsersForwardCompleted(ClientMessage.ReadStreamEventsForwardCompleted result)
        {
            if (_aborted)
                return;
            switch (result.Result)
            {
                case ReadStreamResult.Success:
                    if (!result.IsEndOfStream)
                        BeginReadForward(result.NextEventNumber);

                    foreach (var loginName in from eventData in result.Events
                                              let @event = eventData.Event
                                              where @event.EventType == UserEventType
                                              let stringData = Helper.UTF8NoBom.GetString(@event.Data)
                                              select stringData)
                        BeginReadUserDetails(loginName);

                    break;
                case ReadStreamResult.NoStream:
                    Abort(UserManagementMessage.Error.NotFound);
                    break;
                default:
                    Abort(UserManagementMessage.Error.Error);
                    break;
            }
            _activeRequests--;
            TryComplete();
        }
Esempio n. 9
0
 public override void process(ClientMessage message, Transceiver connection)
 {
     if(message.type == "newUser")
     {
         this.RequestKey(message.Get("username"));
     }
 }
        public static string SmartFormat(ClientMessage.ReadEventCompleted completed, ICodec targetCodec)
        {
            var dto = new HttpClientMessageDto.ReadEventCompletedText(completed);
            if (completed.Record.Event.Flags.HasFlag(PrepareFlags.IsJson))
            {
                var deserializedData = Codec.Json.From<object>((string) dto.Data);
                var deserializedMetadata = Codec.Json.From<object>((string) dto.Metadata);

                if (deserializedData != null)
                    dto.Data = deserializedData;
                if (deserializedMetadata != null)
                    dto.Metadata = deserializedMetadata;
            }

            switch (targetCodec.ContentType)
            {
                case ContentType.Xml:
                case ContentType.ApplicationXml:
                case ContentType.Atom:
                {
                    var serializeObject = JsonConvert.SerializeObject(dto);
                    var deserializeXmlNode = JsonConvert.DeserializeXmlNode(serializeObject, "read-event-result");
                    return deserializeXmlNode.InnerXml;
                }

                default:
                    return targetCodec.To(dto);
            }
        }
Esempio n. 11
0
 internal static void ObjectCallback(ClientMessage message)
 {
     lock (freeObjects.SyncRoot)
     {
         freeObjects.Enqueue(message);
     }
 }
        public override void Handle(ClientMessage.ReadAllEventsForwardCompleted message)
        {
            if (_disposed)
                return;
            if (!_eventsRequested)
                throw new InvalidOperationException("Read events has not been requested");
            if (_paused)
                throw new InvalidOperationException("Paused");
            _eventsRequested = false;

            if (message.Result.Records.Length == 0)
            {
                // the end
                if (_deliverEndOfTfPosition)
                    DeliverLastCommitPosition(_from);
                // allow joining heading distribution
            }
            else
            {
                for (int index = 0; index < message.Result.Records.Length; index++)
                {
                    var @event = message.Result.Records[index];
                    DeliverEvent(@event, message.Result.TfEofPosition);
                }
                _from = message.Result.NextPos;
            }

            if (_pauseRequested)
                _paused = true;
            else if (message.Result.Records.Length == 0)
                RequestEvents(delay: true);
            else
                _publisher.Publish(CreateTickMessage());
        }
Esempio n. 13
0
 internal static void HandlePacket(GameClientMessageHandler handler, ClientMessage message)
 {
     if (handlers.ContainsKey(message.Id))
     {
         StaticRequestHandler currentHandler = (StaticRequestHandler)handlers[message.Id];
         currentHandler.Invoke(handler);
     }
 }
 public static string GetJsonReadResult(ClientMessage.ReadEventCompleted completed, bool dataJson = true, bool metadataJson = true)
 {
     return string.Format(JsonReadFormat,
                          WrapIntoQuotes(completed.Record.Event.EventStreamId),
                          completed.Record.Event.EventNumber,
                          WrapIntoQuotes(completed.Record.Event.EventType),
                          dataJson ? JsonData : WrapIntoQuotes(AsString(completed.Record.Event.Data)),
                          metadataJson ? JsonMetadata : WrapIntoQuotes(AsString(completed.Record.Event.Metadata)));
 }
Esempio n. 15
0
 private void SendConnectionMessage(Controller controller, string username, string password, string servername, string port)
 {
     ClientMessage message = new ClientMessage("connect");
     message.Add("server", servername);
     message.Add("port", port);
     message.Add("username", username);
     message.Add("password", password);
     controller.message_pump.process_message(message);
 }
 public static string GetXmlReadResult(ClientMessage.ReadEventCompleted completed, bool dataJson = true, bool metadataJson = true)
 {
     return string.Format(XmlReadFormat,
                          completed.Record.Event.EventStreamId,
                          completed.Record.Event.EventNumber,
                          completed.Record.Event.EventType,
                          dataJson ? XmlData : AsString(completed.Record.Event.Data),
                          metadataJson ? XmlMetadata : AsString(completed.Record.Event.Metadata));
 }
 public static bool InvokeHandler(ref TcpClient sender, ClientMessage opcode, byte[] data)
 {
     if (OpcodeHandlers.ContainsKey(opcode))
     {
         OpcodeHandlers[opcode].Invoke(ref sender, data);
         return true;
     }
     else
         return false;
 }
Esempio n. 18
0
 public static bool InvokeHandler(ref PacketReader reader, WorldClass session, ClientMessage opcode)
 {
     if (OpcodeHandlers.ContainsKey(opcode))
     {
         OpcodeHandlers[opcode].Invoke(ref reader, ref session);
         return true;
     }
     else
         return false;
 }
        public override void Handle(ClientMessage.ReadStreamEventsForwardCompleted message)
        {
            if (_disposed)
                return;
            if (!_eventsRequested)
                throw new InvalidOperationException("Read events has not been requested");
            if (message.EventStreamId != _streamName)
                throw new InvalidOperationException(
                    string.Format("Invalid stream name: {0}.  Expected: {1}", message.EventStreamId, _streamName));
            if (_paused)
                throw new InvalidOperationException("Paused");
            _eventsRequested = false;
            switch (message.Result)
            {
                case ReadStreamResult.NoStream:
                    DeliverSafeJoinPosition(GetLastCommitPositionFrom(message)); // allow joining heading distribution
                    if (_pauseRequested)
                        _paused = true;
                    else 
                        RequestEvents(delay: true);
                    SendIdle();
                    SendEof();
                    break;
                case ReadStreamResult.Success:
                    if (message.Events.Length == 0)
                    {
                        // the end
                        DeliverSafeJoinPosition(GetLastCommitPositionFrom(message));
                        SendIdle();
                        SendEof();
                    }
                    else
                    {
                        for (int index = 0; index < message.Events.Length; index++)
                        {
                            var @event = message.Events[index].Event;
                            var @link = message.Events[index].Link;
                            DeliverEvent(@event, @link, 100.0f * (link ?? @event).EventNumber / message.LastEventNumber);
                        }
                    }
                    if (_disposed)
                        return;

                    if (_pauseRequested)
                        _paused = true;
                    else if (message.Events.Length == 0)
                        RequestEvents(delay: true);
                    else
                        _publisher.Publish(CreateTickMessage());
                    break;
                default:
                    throw new NotSupportedException(
                        string.Format("ReadEvents result code was not recognized. Code: {0}", message.Result));
            }
        }
Esempio n. 20
0
 public void process_message(ClientMessage message)
 {
     try
     {
         this._client_event(message, this.connection);
     }
     catch(Exception e)
     {
         Logger.log("Error: No plugins loaded to process client message. (Dropping) "+e.Message+" \n"+e.StackTrace, Logger.Verbosity.moderate);
     }
 }
Esempio n. 21
0
 public static void HandlePacket(GameClientMessageHandler handler, ClientMessage message)
 {
     if (StaticClientMessageHandler.handlers.ContainsKey(message.Id))
     {
        // Logging.WriteLine(message.ToString(), ConsoleColor.Green);
         StaticClientMessageHandler.StaticRequestHandler staticRequestHandler = StaticClientMessageHandler.handlers[message.Id];
         staticRequestHandler(handler);
         return;
     }
  //   Logging.WriteLine(message.ToString(), ConsoleColor.Red);
 }
Esempio n. 22
0
        internal RecordedEvent(ClientMessage.StreamEventAppeared streamEvent)
        {
            EventStreamId = streamEvent.EventStreamId;

            EventId = new Guid(streamEvent.EventId);
            EventNumber = streamEvent.EventNumber;

            EventType = streamEvent.EventType;

            Data = streamEvent.Data;
            Metadata = streamEvent.Metadata;
        }
        internal EventReadResult(EventReadStatus status, 
                                 string stream, 
                                 int eventNumber, 
                                 ClientMessage.ResolvedIndexedEvent @event)
        {
            Ensure.NotNullOrEmpty(stream, "stream");

            Status = status;
            Stream = stream;
            EventNumber = eventNumber;
            Event = status == EventReadStatus.Success ? new ResolvedEvent(@event) : (ResolvedEvent?)null;
        }
        internal RecordedEvent(ClientMessage.EventRecord systemRecord)
        {
            EventStreamId = systemRecord.EventStreamId;

            EventId = new Guid(systemRecord.EventId);
            EventNumber = systemRecord.EventNumber;

            EventType = systemRecord.EventType;

            Data = systemRecord.Data;
            Metadata = systemRecord.Metadata;
        }
        public static void HandlePacket(GameClientMessageHandler handler, ClientMessage message)
        {
            if (StaticClientMessageHandler.handlers.ContainsKey(message.Id))
            {
#if DEBUG
                Logging.WriteLine("Packet id  = " + message.Id, ConsoleColor.Green);
#endif
                StaticClientMessageHandler.StaticRequestHandler staticRequestHandler = StaticClientMessageHandler.handlers[message.Id];
                staticRequestHandler(handler);
                return;
            }
        }
 public static void Encode(StackTraceElement stackTraceElement, ClientMessage clientMessage)
 {
     clientMessage.Set(stackTraceElement.ClassName);
     clientMessage.Set(stackTraceElement.MethodName);
     string fileName = stackTraceElement.FileName;
     var fileName_NotNull = fileName != null;
     clientMessage.Set(fileName_NotNull);
     if (fileName_NotNull)
     {
         clientMessage.Set(fileName);
     }
     clientMessage.Set(stackTraceElement.LineNumber);
 }
        internal RecordedEvent(ClientMessage.EventRecord systemRecord)
        {
            EventStreamId = systemRecord.EventStreamId;

            EventId = new Guid(systemRecord.EventId);
            EventNumber = systemRecord.EventNumber;

            EventType = systemRecord.EventType;
            if (systemRecord.Created.HasValue)
                Created = DateTime.FromBinary(systemRecord.Created.Value);
            Data = systemRecord.Data ?? Empty.ByteArray;
            Metadata = systemRecord.Metadata ?? Empty.ByteArray;
        }
        public static void sendPacket(TcpClient client, ClientMessage clientMessage, byte[] data)
        {
            // create the packet that will be send
            byte[] appendedOpcode = new byte[data.Length + 1];
            data.CopyTo(appendedOpcode, 1);
            appendedOpcode[0] = (byte)clientMessage;
            data = appendedOpcode;

            // SEND
            NetworkStream clientStream = client.GetStream();
            clientStream.Write(data, 0, data.Count());
            clientStream.Flush();
        }
Esempio n. 29
0
        public static string ConvertOnRead(ClientMessage.ReadEventCompleted completed, ICodec responseCodec)
        {
            var dto = new ClientMessageDto.ReadEventCompletedText(completed);

            if (completed.Record.Flags.HasFlag(PrepareFlags.IsJson))
            {
                dto.Data = Codec.Json.From<object>((string) dto.Data);
                dto.Metadata = Codec.Json.From<object>((string) dto.Metadata);
            }

            var type = responseCodec.GetType();
            type = type == typeof (CustomCodec) ? ((CustomCodec) responseCodec).BaseCodec.GetType() : type;
            return type == typeof(XmlCodec) ? Codec.Json.ToXmlUsingJson(dto) : responseCodec.To(dto);
        }
 public void LoadStateCompleted(ClientMessage.ReadStreamEventsBackwardCompleted msg)
 {
     if (msg.Events.Length > 0)
     {
         var checkpoint = msg.Events.Where(v => v.Event.EventType == "SubscriptionCheckpoint").Select(x => x.Event).FirstOrDefault();
         if (checkpoint != null)
         {
             var lastEvent = checkpoint.Data.ParseJson<int>();
             _onStateLoaded(lastEvent);
             return;
         }
     }
     _onStateLoaded(null);
 }
 public void Handle(GameClient Session, ClientMessage Event)
 {
     Session.SendMessage(GoldTree.GetGame().GetCatalog().method_18(Session.GetHabbo().Rank));
 }
        public static void TurbineChatReceived(ClientMessage clientMessage, Session session)
        {
            if (!PropertyManager.GetBool("use_turbine_chat").Item)
            {
                return;
            }

            clientMessage.Payload.ReadUInt32(); // Bytes to follow
            var chatBlobType = (ChatNetworkBlobType)clientMessage.Payload.ReadUInt32();

            clientMessage.Payload.ReadUInt32(); // Always 2
            clientMessage.Payload.ReadUInt32(); // Always 1
            clientMessage.Payload.ReadUInt32(); // Always 0
            clientMessage.Payload.ReadUInt32(); // Always 0
            clientMessage.Payload.ReadUInt32(); // Always 0
            clientMessage.Payload.ReadUInt32(); // Always 0
            clientMessage.Payload.ReadUInt32(); // Bytes to follow

            if (session.Player.IsGagged)
            {
                session.Player.SendGagError();
                return;
            }

            if (chatBlobType == ChatNetworkBlobType.NETBLOB_REQUEST_BINARY)
            {
                var contextId = clientMessage.Payload.ReadUInt32(); // 0x01 - 0x71 (maybe higher), typically though 0x01 - 0x0F
                clientMessage.Payload.ReadUInt32();                 // Always 2
                clientMessage.Payload.ReadUInt32();                 // Always 2
                var channelID = clientMessage.Payload.ReadUInt32();

                int messageLen = clientMessage.Payload.ReadByte();
                if ((messageLen & 0x80) > 0) // PackedByte
                {
                    byte lowbyte = clientMessage.Payload.ReadByte();
                    messageLen = ((messageLen & 0x7F) << 8) | lowbyte;
                }
                var messageBytes = clientMessage.Payload.ReadBytes(messageLen * 2);
                var message      = Encoding.Unicode.GetString(messageBytes);

                clientMessage.Payload.ReadUInt32(); // Always 0x0C
                var senderID = clientMessage.Payload.ReadUInt32();
                clientMessage.Payload.ReadUInt32(); // Always 0
                var chatType = (ChatType)clientMessage.Payload.ReadUInt32();


                if (channelID == TurbineChatChannel.Society)                                                             // shouldn't ever be hit
                {
                    ChatPacket.SendServerMessage(session, "You do not belong to a society.", ChatMessageType.Broadcast); // I don't know if this is how it was done on the live servers
                    return;
                }

                var gameMessageTurbineChat = new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_EVENT_BINARY, channelID, session.Player.Name, message, senderID, chatType);

                if (channelID > TurbineChatChannel.SocietyRadiantBlood) // Channel must be an allegiance channel

                {
                    var allegiance = AllegianceManager.FindAllegiance(channelID);
                    if (allegiance != null)
                    {
                        // is sender booted / gagged?
                        if (!allegiance.IsMember(session.Player.Guid))
                        {
                            return;
                        }
                        if (allegiance.IsFiltered(session.Player.Guid))
                        {
                            return;
                        }

                        // iterate through all allegiance members
                        foreach (var member in allegiance.Members.Keys)
                        {
                            // is this allegiance member online?
                            var online = PlayerManager.GetOnlinePlayer(member);
                            if (online == null)
                            {
                                continue;
                            }

                            // is this member booted / gagged?
                            if (allegiance.IsFiltered(member) || online.SquelchManager.Squelches.Contains(session.Player, ChatMessageType.Allegiance))
                            {
                                continue;
                            }

                            // does this player have allegiance chat filtered?
                            if (!online.GetCharacterOption(CharacterOption.ListenToAllegianceChat))
                            {
                                continue;
                            }

                            online.Session.Network.EnqueueSend(gameMessageTurbineChat);
                        }

                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                    }
                }
                else if (channelID > TurbineChatChannel.Society) // Channel must be a society restricted channel
                {
                    var senderSociety = session.Player.Society;

                    //var adjustedChatType = senderSociety switch
                    //{
                    //    FactionBits.CelestialHand => ChatType.SocietyCelHan,
                    //    FactionBits.EldrytchWeb => ChatType.SocietyEldWeb,
                    //    FactionBits.RadiantBlood => ChatType.SocietyRadBlo,
                    //    _ => ChatType.Society
                    //};

                    //gameMessageTurbineChat = new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_EVENT_BINARY, channelID, session.Player.Name, message, senderID, adjustedChatType);

                    if (senderSociety == FactionBits.None)
                    {
                        ChatPacket.SendServerMessage(session, "You do not belong to a society.", ChatMessageType.Broadcast); // I don't know if this is how it was done on the live servers
                        return;
                    }

                    foreach (var recipient in PlayerManager.GetAllOnline())
                    {
                        // handle filters
                        if (senderSociety != recipient.Society && !recipient.IsAdmin)
                        {
                            continue;
                        }

                        if (!recipient.GetCharacterOption(CharacterOption.ListenToSocietyChat))
                        {
                            continue;
                        }

                        if (recipient.SquelchManager.Squelches.Contains(session.Player, ChatMessageType.AllChannels))
                        {
                            continue;
                        }

                        recipient.Session.Network.EnqueueSend(gameMessageTurbineChat);
                    }

                    session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                }
                else if (channelID == TurbineChatChannel.Olthoi) // Channel must is the Olthoi play channel
                {
                    // todo: olthoi play chat (ha! yeah right...)
                }
                else // Channel must be one of the channels available to all players
                {
                    if (PropertyManager.GetBool("chat_echo_only").Item)
                    {
                        session.Network.EnqueueSend(gameMessageTurbineChat);
                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                        return;
                    }

                    if (PropertyManager.GetBool("chat_requires_account_15days").Item&& !session.Player.Account15Days)
                    {
                        if (PropertyManager.GetBool("chat_echo_reject").Item)
                        {
                            session.Network.EnqueueSend(gameMessageTurbineChat);
                        }

                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                        return;
                    }

                    var chat_requires_account_time_seconds = PropertyManager.GetLong("chat_requires_account_time_seconds").Item;
                    if (chat_requires_account_time_seconds > 0 && (DateTime.UtcNow - session.Player.Account.CreateTime).TotalSeconds < chat_requires_account_time_seconds)
                    {
                        if (PropertyManager.GetBool("chat_echo_reject").Item)
                        {
                            session.Network.EnqueueSend(gameMessageTurbineChat);
                        }

                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                        return;
                    }

                    var chat_requires_player_age = PropertyManager.GetLong("chat_requires_player_age").Item;
                    if (chat_requires_player_age > 0 && session.Player.Age < chat_requires_player_age)
                    {
                        if (PropertyManager.GetBool("chat_echo_reject").Item)
                        {
                            session.Network.EnqueueSend(gameMessageTurbineChat);
                        }

                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                        return;
                    }

                    var chat_requires_player_level = PropertyManager.GetLong("chat_requires_player_level").Item;
                    if (chat_requires_player_level > 0 && session.Player.Level < chat_requires_player_level)
                    {
                        if (PropertyManager.GetBool("chat_echo_reject").Item)
                        {
                            session.Network.EnqueueSend(gameMessageTurbineChat);
                        }

                        session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                        return;
                    }


                    foreach (var recipient in PlayerManager.GetAllOnline())
                    {
                        // handle filters
                        if (channelID == TurbineChatChannel.General && !recipient.GetCharacterOption(CharacterOption.ListenToGeneralChat) ||
                            channelID == TurbineChatChannel.Trade && !recipient.GetCharacterOption(CharacterOption.ListenToTradeChat) ||
                            channelID == TurbineChatChannel.LFG && !recipient.GetCharacterOption(CharacterOption.ListenToLFGChat) ||
                            channelID == TurbineChatChannel.Roleplay && !recipient.GetCharacterOption(CharacterOption.ListenToRoleplayChat))
                        {
                            continue;
                        }

                        if ((channelID == TurbineChatChannel.General && PropertyManager.GetBool("chat_disable_general").Item) ||
                            (channelID == TurbineChatChannel.Trade && PropertyManager.GetBool("chat_disable_trade").Item) ||
                            (channelID == TurbineChatChannel.LFG && PropertyManager.GetBool("chat_disable_lfg").Item) ||
                            (channelID == TurbineChatChannel.Roleplay && PropertyManager.GetBool("chat_disable_roleplay").Item))
                        {
                            if (PropertyManager.GetBool("chat_echo_reject").Item)
                            {
                                session.Network.EnqueueSend(gameMessageTurbineChat);
                            }

                            session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                            return;
                        }

                        if (recipient.SquelchManager.Squelches.Contains(session.Player, ChatMessageType.AllChannels))
                        {
                            continue;
                        }

                        recipient.Session.Network.EnqueueSend(gameMessageTurbineChat);
                    }

                    session.Network.EnqueueSend(new GameMessageTurbineChat(ChatNetworkBlobType.NETBLOB_RESPONSE_BINARY, contextId, null, null, 0, chatType));
                }

                LogTurbineChat(channelID, session.Player.Name, message, senderID, chatType);
            }
            else
            {
                Console.WriteLine($"Unhandled TurbineChatHandler ChatNetworkBlobType: 0x{(uint)chatBlobType:X4}");
            }
        }
 public void Handle(GameClient Session, ClientMessage Event)
 {
     Session.SendMessage(Essential.GetGame().GetNavigator().SerializePopularRoomTags());
 }
 public static void Handle(ClientMessage message, Session session)
 {
     //Console.WriteLine("Received 0x24C - House - RemoveAllStoragePermission");
     session.Player.HandleActionRemoveAllStorage();
 }
Esempio n. 35
0
 protected override Guid ReadSubscribeResponse(ClientMessage responseMessage, SubscriptionState <CollectionItemEventHandlers <T> > state)
 => ListAddListenerCodec.DecodeResponse(responseMessage).Response;
Esempio n. 36
0
        public void HandleActionFinishBarber(ClientMessage message)
        {
            // Read the payload sent from the client...
            PaletteBaseId                = message.Payload.ReadUInt32();
            HeadObjectDID                = message.Payload.ReadUInt32();
            Character.HairTexture        = message.Payload.ReadUInt32();
            Character.DefaultHairTexture = message.Payload.ReadUInt32();
            CharacterChangesDetected     = true;
            EyesTextureDID               = message.Payload.ReadUInt32();
            DefaultEyesTextureDID        = message.Payload.ReadUInt32();
            NoseTextureDID               = message.Payload.ReadUInt32();
            DefaultNoseTextureDID        = message.Payload.ReadUInt32();
            MouthTextureDID              = message.Payload.ReadUInt32();
            DefaultMouthTextureDID       = message.Payload.ReadUInt32();
            SkinPaletteDID               = message.Payload.ReadUInt32();
            HairPaletteDID               = message.Payload.ReadUInt32();
            EyesPaletteDID               = message.Payload.ReadUInt32();
            SetupTableId = message.Payload.ReadUInt32();

            uint option_bound = message.Payload.ReadUInt32(); // Supress Levitation - Empyrean Only
            uint option_unk   = message.Payload.ReadUInt32(); // Unknown - Possibly set aside for future use?

            // Check if Character is Empyrean, and if we need to set/change/send new motion table
            if (Heritage == 9)
            {
                // These are the motion tables for Empyrean float and not-float (one for each gender). They are hard-coded into the client.
                const uint EmpyreanMaleFloatMotionDID   = 0x0900020Bu;
                const uint EmpyreanFemaleFloatMotionDID = 0x0900020Au;
                const uint EmpyreanMaleMotionDID        = 0x0900020Eu;
                const uint EmpyreanFemaleMotionDID      = 0x0900020Du;

                // Check for the Levitation option for Empyrean. Shadow crown and Undead flames are handled by client.
                if (Gender == 1) // Male
                {
                    if (option_bound == 1 && MotionTableId != EmpyreanMaleMotionDID)
                    {
                        MotionTableId = EmpyreanMaleMotionDID;
                        Session.Network.EnqueueSend(new GameMessagePrivateUpdateDataID(this, PropertyDataId.MotionTable, (uint)MotionTableId));
                    }
                    else if (option_bound == 0 && MotionTableId != EmpyreanMaleFloatMotionDID)
                    {
                        MotionTableId = EmpyreanMaleFloatMotionDID;
                        Session.Network.EnqueueSend(new GameMessagePrivateUpdateDataID(this, PropertyDataId.MotionTable, (uint)MotionTableId));
                    }
                }
                else // Female
                {
                    if (option_bound == 1 && MotionTableId != EmpyreanFemaleMotionDID)
                    {
                        MotionTableId = EmpyreanFemaleMotionDID;
                        Session.Network.EnqueueSend(new GameMessagePrivateUpdateDataID(this, PropertyDataId.MotionTable, (uint)MotionTableId));
                    }
                    else if (option_bound == 0 && MotionTableId != EmpyreanFemaleFloatMotionDID)
                    {
                        MotionTableId = EmpyreanFemaleFloatMotionDID;
                        Session.Network.EnqueueSend(new GameMessagePrivateUpdateDataID(this, PropertyDataId.MotionTable, (uint)MotionTableId));
                    }
                }
            }


            // Broadcast updated character appearance
            EnqueueBroadcast(new GameMessageObjDescEvent(this));
        }
Esempio n. 37
0
 public void Handle(GameClient Session, ClientMessage Event)
 {
     Session.SendMessage(GoldTree.GetGame().GetNavigator().method_12(Session, -3));
 }
Esempio n. 38
0
 private static void smethod_6(Session session_0, ClientMessage clientMessage_0)
 {
     session_0.SendData(SpaceLatencyTestComposer.Compose(), false);
 }
Esempio n. 39
0
 /// <summary>
 ///     Handles the request.
 /// </summary>
 /// <param name="request">The request.</param>
 internal void HandleRequest(ClientMessage request)
 {
     Request = request;
     LibraryParser.HandlePacket(this, request);
 }
Esempio n. 40
0
 private static void smethod_25(Session session_0, ClientMessage clientMessage_0)
 {
 }
Esempio n. 41
0
        private static void smethod_18(Session session_0, ClientMessage clientMessage_0)
        {
            if (!session_0.CharacterInfo.IsMuted)
            {
                SpaceInstance instanceBySpaceId = SpaceManager.GetInstanceBySpaceId(session_0.CurrentSpaceId);
                if (instanceBySpaceId != null)
                {
                    SpaceActor actorByReferenceId = instanceBySpaceId.GetActorByReferenceId(session_0.CharacterId, SpaceActorType.UserCharacter);
                    if (actorByReferenceId != null)
                    {
                        CharacterInfo referenceObject = (CharacterInfo)actorByReferenceId.ReferenceObject;
                        clientMessage_0.ReadUnsignedInteger();

                        string input        = InputFilter.FilterString(clientMessage_0.ReadString().Trim(), false);
                        int    messageColor = clientMessage_0.ReadInteger();
                        if (input.Length != 0)
                        {
                            if (input.Length > 100)
                            {
                                input = input.Substring(0, 100);
                            }

                            if (referenceObject.Staff == 0)
                            {
                                messageColor = 1;
                            }

                            if (referenceObject.Staff == 1)
                            {
                                messageColor = 2;
                            }

                            if (referenceObject.Staff == 2)
                            {
                                messageColor = 7;
                            }

                            if (referenceObject.Staff == 3)
                            {
                                messageColor = 1;
                            }

                            if (referenceObject.Staff == 4)
                            {
                                messageColor = 9;
                            }

                            if (referenceObject.Staff == 5)
                            {
                                messageColor = 10;
                            }

                            if (referenceObject.Staff == 6)
                            {
                                messageColor = 8;
                            }

                            if (!input.StartsWith("@") || !ChatCommands.HandleCommand(session_0, input))
                            {
                                actorByReferenceId.Chat(input, messageColor, referenceObject.Staff == 1);
                            }

                            //1 white, 2 gold, 6 pink, 7 red, 8 blue, 9 orange, 10 green


                            /*
                             *
                             *  White	 =      Normal
                             *  Gold	 =      RetroMods
                             *  Green    =      Designer
                             *  Blue     =      Translators
                             *  Pink     =      VIP
                             *  Red      =      Admin
                             *  Orange   =      XAT Staff
                             *
                             */
                        }
                    }
                }
            }
        }
Esempio n. 42
0
        private static void smethod_12(Session session_0, ClientMessage clientMessage_0)
        {
            uint          actionId          = clientMessage_0.ReadUnsignedInteger();
            uint          actorId           = clientMessage_0.ReadUnsignedInteger();
            SpaceInstance instanceBySpaceId = SpaceManager.GetInstanceBySpaceId(session_0.CurrentSpaceId);

            if (instanceBySpaceId == null)
            {
                return;
            }
            SpaceActor actorByReferenceId = instanceBySpaceId.GetActorByReferenceId(session_0.CharacterId, SpaceActorType.UserCharacter);
            SpaceActor actor = instanceBySpaceId.GetActor(actorId);

            if ((actor == null) || (actorByReferenceId == null))
            {
                return;
            }
            CharacterInfo referenceObject = (CharacterInfo)actorByReferenceId.ReferenceObject;
            CharacterInfo info2           = (CharacterInfo)actor.ReferenceObject;

            if (actorByReferenceId.IsLocked || actor.IsLocked)
            {
                return;
            }
            actorByReferenceId.StopMoving();
            actor.StopMoving();
            if (SessionManager.GetSessionByCharacterId(actor.ReferenceId) == null)
            {
                return;
            }
            using (SqlDatabaseClient client = SqlDatabaseManager.GetClient())
            {
                switch (actionId)
                {
                case 1:
                    referenceObject.UpdateKisses(client, false);
                    info2.UpdateKisses(client, true);
                    actor.Lock(3, false, false);
                    actorByReferenceId.Lock(3, false, false);
                    goto Label_0165;

                case 2:
                    referenceObject.UpdateCocktails(client, false);
                    info2.UpdateCocktails(client, true);
                    actor.Lock(9, false, false);
                    actorByReferenceId.Lock(9, false, false);
                    goto Label_0165;

                case 3:
                    referenceObject.UpdateRoses(client, false);
                    info2.UpdateRoses(client, true);
                    actor.Lock(4, false, false);
                    actorByReferenceId.Lock(4, false, false);
                    goto Label_0165;
                }
                referenceObject.UpdateKisses(client, false);
                info2.UpdateKisses(client, true);
                actor.Lock(3, false, false);
                actorByReferenceId.Lock(3, false, false);
            }
Label_0165:
            instanceBySpaceId.BroadcastMessage(SpaceUpdateUserStatistics.Compose(actorByReferenceId, actionId), 0, false);
            instanceBySpaceId.BroadcastMessage(SpaceUpdateUserStatistics.Compose(actor, actionId), 0, false);
            instanceBySpaceId.BroadcastMessage(SpaceUserAcceptInteract.Compose(actor, actorByReferenceId, actionId), 0, false);
        }
Esempio n. 43
0
        internal static void HandleMessage(ClientObject client, ClientMessage message)
        {
            //Prevent plugins from dodging SPLIT_MESSAGE. If they are modified, every split message will be broken.
            if (message.type != ClientMessageType.SPLIT_MESSAGE)
            {
                DMPPluginHandler.FireOnMessageReceived(client, message);

                if (message.handled)
                {
                    //a plugin has handled this message and requested suppression of the default DMP behavior
                    return;
                }
            }

            //Clients can only send HEARTBEATS, HANDSHAKE_REQUEST or CONNECTION_END's until they are authenticated.
            if (!client.authenticated && !(message.type == ClientMessageType.HEARTBEAT || message.type == ClientMessageType.HANDSHAKE_RESPONSE || message.type == ClientMessageType.CONNECTION_END))
            {
                Messages.ConnectionEnd.SendConnectionEnd(client, "You must authenticate before attempting to send a " + message.type.ToString() + " message");
                return;
            }

#if !DEBUG
            try
            {
#endif
            switch (message.type)
            {
            case ClientMessageType.HEARTBEAT:
                //Don't do anything for heartbeats, they just keep the connection alive
                break;

            case ClientMessageType.HANDSHAKE_RESPONSE:
                Messages.Handshake.HandleHandshakeResponse(client, message.data);
                break;

            case ClientMessageType.CHAT_MESSAGE:
                Messages.Chat.HandleChatMessage(client, message.data);
                break;

            case ClientMessageType.PLAYER_STATUS:
                Messages.PlayerStatus.HandlePlayerStatus(client, message.data);
                break;

            case ClientMessageType.PLAYER_COLOR:
                Messages.PlayerColor.HandlePlayerColor(client, message.data);
                break;

            case ClientMessageType.GROUP:
                Messages.GroupMessage.HandleMessage(client, message.data);
                break;

            case ClientMessageType.SCENARIO_DATA:
                Messages.ScenarioData.HandleScenarioModuleData(client, message.data);
                break;

            case ClientMessageType.SYNC_TIME_REQUEST:
                Messages.SyncTimeRequest.HandleSyncTimeRequest(client, message.data);
                break;

            case ClientMessageType.KERBALS_REQUEST:
                Messages.KerbalsRequest.HandleKerbalsRequest(client);
                break;

            case ClientMessageType.KERBAL_PROTO:
                Messages.KerbalProto.HandleKerbalProto(client, message.data);
                break;

            case ClientMessageType.VESSELS_REQUEST:
                Messages.VesselRequest.HandleVesselsRequest(client, message.data);
                break;

            case ClientMessageType.VESSEL_PROTO:
                Messages.VesselProto.HandleVesselProto(client, message.data);
                break;

            case ClientMessageType.VESSEL_UPDATE:
                Messages.VesselUpdate.HandleVesselUpdate(client, message.data);
                break;

            case ClientMessageType.VESSEL_REMOVE:
                Messages.VesselRemove.HandleVesselRemoval(client, message.data);
                break;

            case ClientMessageType.PERMISSION:
                Messages.PermissionMessage.HandleMessage(client, message.data);
                break;

            case ClientMessageType.CRAFT_LIBRARY:
                Messages.CraftLibrary.HandleCraftLibrary(client, message.data);
                break;

            case ClientMessageType.SCREENSHOT_LIBRARY:
                Messages.ScreenshotLibrary.HandleScreenshotLibrary(client, message.data);
                break;

            case ClientMessageType.FLAG_SYNC:
                Messages.FlagSync.HandleFlagSync(client, message.data);
                break;

            case ClientMessageType.PING_REQUEST:
                Messages.PingRequest.HandlePingRequest(client, message.data);
                break;

            case ClientMessageType.MOTD_REQUEST:
                Messages.MotdRequest.HandleMotdRequest(client);
                break;

            case ClientMessageType.WARP_CONTROL:
                Messages.WarpControl.HandleWarpControl(client, message.data);
                break;

            case ClientMessageType.LOCK_SYSTEM:
                Messages.LockSystem.HandleLockSystemMessage(client, message.data);
                break;

            case ClientMessageType.MOD_DATA:
                Messages.ModData.HandleModDataMessage(client, message.data);
                break;

            case ClientMessageType.KERBAL_REMOVE:
                Messages.VesselRemove.HandleKerbalRemoval(client, message.data);
                break;

            case ClientMessageType.SPLIT_MESSAGE:
                Messages.SplitMessage.HandleSplitMessage(client, message.data);
                break;

            case ClientMessageType.CONNECTION_END:
                Messages.ConnectionEnd.HandleConnectionEnd(client, message.data);
                break;

            case ClientMessageType.MODPACK_DATA:
                Messages.Modpack.HandleModpackMessage(client, message.data);
                break;

            default:
                DarkLog.Debug("Unhandled message type " + message.type);
                Messages.ConnectionEnd.SendConnectionEnd(client, "Unhandled message type " + message.type);
#if DEBUG
                throw new NotImplementedException("Message type not implemented");
#else
                break;
#endif
            }
#if !DEBUG
        }

        catch (Exception e)
        {
            DarkLog.Debug("Error handling " + message.type + " from " + client.playerName + ", exception: " + e);
            Messages.ConnectionEnd.SendConnectionEnd(client, "Server failed to process " + message.type + " message");
        }
#endif
        }
        public override void Handle(GameClient session, ClientMessage message)
        {
            this.Username = message.PopFixedString();

            base.Handle(session, message);
        }
Esempio n. 45
0
 public static void Handle(ClientMessage message, Session session)
 {
     session.Network.EnqueueSend(new GameEventHouseStatus(session));
 }
Esempio n. 46
0
        public void DumpMessage()
        {
            Assert.Throws <ArgumentNullException>(() => _ = ((ClientMessage)null).Dump());

            // exception
            var m = new ClientMessage(new Frame(new byte[64]));

            m.MessageType = 0;
            var s = m.Dump();

#if DEBUG
            Assert.That(s.ToLf(), Is.EqualTo(@"EXCEPTION
FRAME {Frame: 70 bytes, Final (0x00002000)}".ToLf()));
#else
            // works, but produces an empty string
            Assert.That(s.ToLf(), Is.EqualTo(""));
#endif
            // message
            m = new ClientMessage(new Frame(new byte[64]));
            m.Append(new Frame(new byte[64]));
            m.Append(new Frame(new byte[64]));
            m.MessageType   = MapAddEntryListenerCodec.RequestMessageType;
            m.Flags        |= ClientMessageFlags.Unfragmented;
            m.PartitionId   = 55;
            m.OperationName = "operation";
            s = m.Dump();

#if DEBUG
            Assert.That(s.ToLf(), Is.EqualTo(@"REQUEST [0]
TYPE 0x11900 operation
PARTID 55
FRAME {Frame: 70 bytes, Unfragmented (0x0000C000)}
FRAME {Frame: 70 bytes, Default (0x00000000)}
FRAME {Frame: 70 bytes, Final (0x00002000)}".ToLf()));
#else
            // works, but produces an empty string
            Assert.That(s.ToLf(), Is.EqualTo(""));
#endif
            m = new ClientMessage(new Frame(new byte[64]));
            m.Append(new Frame(new byte[64]));
            m.Append(new Frame(new byte[64]));
            m.MessageType = MapAddEntryListenerCodec.ResponseMessageType;
            m.Flags      |= ClientMessageFlags.Unfragmented;
            s             = m.Dump();

#if DEBUG
            Assert.That(s.ToLf(), Is.EqualTo(@"RESPONSE [0]
TYPE 0x11901 MapAddEntryListener.Response
FRAME {Frame: 70 bytes, Unfragmented (0x0000C000)}
FRAME {Frame: 70 bytes, Default (0x00000000)}
FRAME {Frame: 70 bytes, Final (0x00002000)}".ToLf()));
#else
            // works, but produces an empty string
            Assert.That(s.ToLf(), Is.EqualTo(""));
#endif

            // event
            m             = new ClientMessage(new Frame(new byte[64]));
            m.MessageType = 0x011902; // MapAddEntryListenerCodec.EventEntryMessageType;
            m.Flags      |= ClientMessageFlags.Event;
            s             = m.Dump();

#if DEBUG
            Assert.That(s.ToLf(), Is.EqualTo(@"EVENT [0]
TYPE 0x11902 MapAddEntryListener.Entry
FRAME {Frame: 70 bytes, Final, Event (0x00002200)}".ToLf()));
#else
            // works, but produces an empty string
            Assert.That(s.ToLf(), Is.EqualTo(""));
#endif
        }
Esempio n. 47
0
 public override void Handle(GameClient session, ClientMessage message)
 {
     base.Handle(session, message);
 }
Esempio n. 48
0
 public void parse(GameClient Session, ClientMessage Event)
 {
 }
Esempio n. 49
0
 protected override bool ReadUnsubscribeResponse(ClientMessage unsubscribeResponseMessage, SubscriptionState <CollectionItemEventHandlers <T> > state)
 => ListRemoveListenerCodec.DecodeResponse(unsubscribeResponseMessage).Response;
Esempio n. 50
0
 public void QueueWrite(ClientMessage message)
 {
     queue.Enqueue(message);
     reset.Set();
 }
Esempio n. 51
0
        public void ParsePacket(ref byte[] bytes)
        {
            if (bytes[0] == 64)
            {
                int i = 0;

                while (i < bytes.Length)
                {
                    try
                    {
                        int num = Base64Encoding.DecodeInt32(new byte[]
                        {
                            bytes[i++],
                            bytes[i++],
                            bytes[i++]
                        });

                        uint uint_ = Base64Encoding.DecodeUInt32(new byte[]
                        {
                            bytes[i++],
                            bytes[i++]
                        });

                        byte[] array = new byte[num - 2];
                        for (int j = 0; j < array.Length; j++)
                        {
                            array[j] = bytes[i++];
                        }

                        if (this.ClientMessageHandler == null)
                        {
                            this.CreateClientMessageHandler();
                        }
                        ClientMessage @class = new ClientMessage(uint_, array);
                        if (@class != null)
                        {
                            try
                            {
                                if (int.Parse(HabboIM.GetConfig().data["debug"]) == 1)
                                {
                                    Logging.WriteLine(string.Concat(new object[]
                                    {
                                        "[",
                                        this.ID,
                                        "] --> [",
                                        @class.Id,
                                        "] ",
                                        @class.Header,
                                        @class.GetBody()
                                    }));
                                }
                            }
                            catch
                            {
                            }
                            Interface @interface;
                            if (HabboIM.GetPacketManager().Handle(@class.Id, out @interface))
                            {
                                try
                                {
                                    @interface.Handle(this, @class);
                                }
                                catch (Exception ex)
                                {
                                    Logging.LogException("Error: " + ex.ToString());
                                    this.method_12();
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex.GetType() == typeof(IndexOutOfRangeException))
                        {
                            return;
                        }
                        Logging.LogException("Error: " + ex.ToString());
                        this.method_12();
                    }
                }
            }
            else
            {
                if (true)
                {
                    this.Connection.SendMessage(CrossdomainPolicy.GetXmlPolicy());
                    this.Message1_0.SendData(HabboIM.GetDefaultEncoding().GetBytes(CrossdomainPolicy.GetXmlPolicy()));
                    this.Connection.Close();
                }
            }
        }
Esempio n. 52
0
        public void parse(GameClient Session, ClientMessage Event)
        {
            Room room = PhoenixEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);

            if (room != null && Session != null)
            {
                if (Session.GetHabbo().Muted)
                {
                    Session.SendNotif(TextManager.GetText("error_muted"));
                }
                else
                {
                    if (Session.GetHabbo().HasRole("ignore_roommute") || !room.RoomMuted)
                    {
                        string str  = PhoenixEnvironment.FilterInjectionChars(Event.PopFixedString());
                        string name = str.Split(new char[]
                        {
                            ' '
                        })[0];
                        string s = str.Substring(name.Length + 1);
                        s = ChatCommandHandler.ApplyWordFilter(s);
                        RoomUser roomUserByHabbo = room.GetRoomUserByHabbo(Session.GetHabbo().Id);
                        RoomUser user2           = room.GetRoomUserByHabbo(name);
                        if (Session.GetHabbo().MaxFloodTime() > 0)
                        {
                            TimeSpan timeSpan = DateTime.Now - Session.GetHabbo().FloodTime;
                            if (timeSpan.Seconds > 4)
                            {
                                Session.GetHabbo().FloodCount = 0;
                            }
                            if (timeSpan.Seconds < 4 && Session.GetHabbo().FloodCount > 5 && !roomUserByHabbo.IsBot)
                            {
                                ServerMessage Message = new ServerMessage(27);
                                Message.AppendInt32(Session.GetHabbo().MaxFloodTime());
                                Session.SendMessage(Message);
                                Session.GetHabbo().Muted      = true;
                                Session.GetHabbo().MuteLength = Session.GetHabbo().MaxFloodTime();
                                return;
                            }
                            Session.GetHabbo().FloodTime = DateTime.Now;
                            Session.GetHabbo().FloodCount++;
                        }
                        ServerMessage Message2 = new ServerMessage(25);
                        Message2.AppendInt32(roomUserByHabbo.VirtualId);
                        Message2.AppendStringWithBreak(s);
                        Message2.AppendBoolean(false);
                        if (roomUserByHabbo != null && !roomUserByHabbo.IsBot)
                        {
                            roomUserByHabbo.GetClient().SendMessage(Message2);
                        }
                        roomUserByHabbo.Unidle();
                        if (user2 != null && !user2.IsBot && (user2.GetClient().GetHabbo().MutedUsers.Count <= 0 || !user2.GetClient().GetHabbo().MutedUsers.Contains(Session.GetHabbo().Id)))
                        {
                            user2.GetClient().SendMessage(Message2);
                            if (GlobalClass.RecordChatlogs && !Session.GetHabbo().isAaron)
                            {
                                using (DatabaseClient client = PhoenixEnvironment.GetDatabase().GetClient())
                                {
                                    client.AddParamWithValue("message", "<Whisper to " + user2.GetClient().GetHabbo().Username + ">: " + s);
                                    client.ExecuteQuery(string.Concat(new object[]
                                    {
                                        "INSERT INTO chatlogs (user_id,room_id,hour,minute,timestamp,message,user_name,full_date) VALUES ('",
                                        Session.GetHabbo().Id,
                                        "','",
                                        room.RoomId,
                                        "','",
                                        DateTime.Now.Hour,
                                        "','",
                                        DateTime.Now.Minute,
                                        "',UNIX_TIMESTAMP(),@message,'",
                                        Session.GetHabbo().Username,
                                        "','",
                                        DateTime.Now.ToLongDateString(),
                                        "')"
                                    }));
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 53
0
        public void Handle(GameClient session, ClientMessage message)
        {
            int searchType = int.Parse(message.PopFixedString());

            session.SendMessage(Skylight.GetGame().GetNavigatorManager().GetEvents(searchType));
        }
Esempio n. 54
0
        public static void Encode(Guid uuid, ClientMessage clientMessage)
        {
            var bytes = uuid.ToByteArray();

            clientMessage.Set(bytes);
        }
Esempio n. 55
0
        public void Handle(GameClient session, ClientMessage message)
        {
            int request = message.PopWiredInt32();

            DataTable friendStream = null;

            using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
            {
                friendStream = dbClient.ReadDataTable("SELECT * FROM user_friend_stream ORDER BY timestamp DESC LIMIT 15"); //check if the user is my friend xo xo
            }

            ServerMessage message_ = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);

            message_.Init(r63aOutgoing.FriendStream);
            message_.AppendInt32(friendStream.Rows.Count); //count

            foreach (DataRow dataRow in friendStream.Rows)
            {
                int      type      = (int)dataRow["type"];
                uint     userId    = (uint)dataRow["user_id"];
                string[] extraData = ((string)dataRow["extra_data"]).Split((char)9);

                message_.AppendInt32((int)dataRow["id"]);
                message_.AppendInt32(type);
                message_.AppendString(userId.ToString());
                if (type != 2) //0 = friend made, 1 = room liked, 3 = motto changed, 4 = room decorated
                {
                    string username = "******";
                    string gender   = "m";
                    string look     = "";

                    GameClient target = Skylight.GetGame().GetGameClientManager().GetGameClientById(userId);
                    if (target != null)
                    {
                        username = target.GetHabbo().Username;
                        gender   = target.GetHabbo().Gender;
                        look     = target.GetHabbo().Look;
                    }
                    else
                    {
                        DataRow userData = null;
                        using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
                        {
                            dbClient.AddParamWithValue("userId", userId);
                            userData = dbClient.ReadDataRow("SELECT username, gender, look FROM users WHERE id = @userId LIMIT 1");
                        }

                        if (userData != null)
                        {
                            username = (string)userData["username"];
                            gender   = (string)userData["gender"];
                            look     = (string)userData["look"];
                        }
                    }

                    message_.AppendString(username);                                                      //user name
                    message_.AppendString(gender.ToLower());                                              //gender
                    message_.AppendString("http://localhost:7977/habbo-imaging/head.gif?figure=" + look); //user head
                }
                else //2 = achievement earned
                {
                    message_.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(userId));        //user name
                    message_.AppendString("");                                                                       //gender
                    message_.AppendString("http://25.76.128.47/habway/c_images/album1584/" + extraData[0] + ".gif"); //image
                }

                message_.AppendInt32((int)Math.Ceiling((TimeUtilies.GetUnixTimestamp() - (double)dataRow["timestamp"]) / 60.0)); //time as minutes
                if (type != 0)                                                                                                   //1 = room liked, 2 = achievement earned, 3 = motto changed, 4 = room decorated
                {
                    if (type == 4)
                    {
                        message_.AppendInt32(2); //link action
                    }
                    else
                    {
                        message_.AppendInt32(1 + type); //link action
                    }
                }
                else //0 = friend made
                {
                    if (session.GetHabbo().GetMessenger().IsFriendWith(uint.Parse(extraData[0])))
                    {
                        message_.AppendInt32(1); //link action
                    }
                    else
                    {
                        message_.AppendInt32(5); //link action
                    }
                }
                message_.AppendInt32(0);                                                                                        //likes
                message_.AppendBoolean(false);                                                                                  //can like?

                if (type == 0)                                                                                                  //friend made
                {
                    message_.AppendString(extraData[0]);                                                                        //friend id
                    message_.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(uint.Parse(extraData[0]))); //friend name
                }
                else if (type == 1)                                                                                             //room liked
                {
                    RoomData roomData = Skylight.GetGame().GetRoomManager().TryGetRoomData(uint.Parse(extraData[0]));
                    if (roomData != null)
                    {
                        message_.AppendString(roomData.ID.ToString()); //room id
                        message_.AppendString(roomData.Name);          //room name
                    }
                    else
                    {
                        message_.AppendString(extraData[0]);     //room id
                        message_.AppendString("Room not found"); //room name
                    }
                }
                else if (type == 2)                      //achievement earned
                {
                    message_.AppendString(extraData[0]); //badge code
                }
                else if (type == 3)                      //motto changed
                {
                    message_.AppendString(extraData[0]); //new motto
                }
                else if (type == 4)                      //room decorated
                {
                    RoomData roomData = Skylight.GetGame().GetRoomManager().TryGetRoomData(uint.Parse(extraData[0]));
                    if (roomData != null)
                    {
                        message_.AppendString(roomData.ID.ToString()); //room id
                        message_.AppendString(roomData.Name);          //room name
                    }
                    else
                    {
                        message_.AppendString(extraData[0]);     //room id
                        message_.AppendString("Room not found"); //room name
                    }
                }
            }

            session.SendMessage(message_);
        }
Esempio n. 56
0
        public void Handle(GameClient Session, ClientMessage Event)
        {
            Room @class = HabboIM.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);

            if (@class != null && [email protected] && (@class.AllowPet || @class.CheckRights(Session, true)))
            {
                uint     uint_  = Event.PopWiredUInt();
                RoomUser class2 = @class.method_48(uint_);
                if (class2 != null && class2.PetData != null && class2.PetData.OwnerId == Session.GetHabbo().Id)
                {
                    using (DatabaseClient class3 = HabboIM.GetDatabase().GetClient())
                    {
                        if (class2.PetData.DBState == DatabaseUpdateState.NeedsInsert)
                        {
                            class3.AddParamWithValue("petname" + class2.PetData.PetId, class2.PetData.Name);
                            class3.AddParamWithValue("petcolor" + class2.PetData.PetId, class2.PetData.Color);
                            class3.AddParamWithValue("petrace" + class2.PetData.PetId, class2.PetData.Race);
                            class3.ExecuteQuery(string.Concat(new object[]
                            {
                                "INSERT INTO `user_pets` VALUES ('",
                                class2.PetData.PetId,
                                "', '",
                                class2.PetData.OwnerId,
                                "', '0', @petname",
                                class2.PetData.PetId,
                                ", @petrace",
                                class2.PetData.PetId,
                                ", @petcolor",
                                class2.PetData.PetId,
                                ", '",
                                class2.PetData.Type,
                                "', '",
                                class2.PetData.Expirience,
                                "', '",
                                class2.PetData.Energy,
                                "', '",
                                class2.PetData.Nutrition,
                                "', '",
                                class2.PetData.Respect,
                                "', '",
                                class2.PetData.CreationStamp,
                                "', '",
                                class2.PetData.X,
                                "', '",
                                class2.PetData.Y,
                                "', '",
                                class2.PetData.Z,
                                "');"
                            }));
                        }
                        else
                        {
                            class3.ExecuteQuery(string.Concat(new object[]
                            {
                                "UPDATE user_pets SET room_id = '0', expirience = '",
                                class2.PetData.Expirience,
                                "', energy = '",
                                class2.PetData.Energy,
                                "', nutrition = '",
                                class2.PetData.Nutrition,
                                "', respect = '",
                                class2.PetData.Respect,
                                "' WHERE Id = '",
                                class2.PetData.PetId,
                                "' LIMIT 1; "
                            }));
                        }
                        class2.PetData.DBState = DatabaseUpdateState.Updated;
                    }
                    Session.GetHabbo().GetInventoryComponent().AddPet(class2.PetData);
                    @class.method_6(class2.VirtualId, false);
                    class2.RoomId = 0u;
                }
            }
        }
Esempio n. 57
0
 protected override ValueTask CodecHandleEventAsync(ClientMessage eventMessage, Func <IData, Guid, int, ValueTask> f, ILoggerFactory loggerFactory)
 => ListAddListenerCodec.HandleEventAsync(
     eventMessage,
     (itemData, memberId, eventTypeData) => f(itemData, memberId, eventTypeData),
     loggerFactory);
 public void Handle(ClientMessage.TransactionStart message)
 {
     if (!_explicitTransactionsSupported)
     {
         var reply = new ClientMessage.TransactionStartCompleted(
             message.CorrelationId,
Esempio n. 59
0
        private static void CharacterCreateEx(ClientMessage message, Session session)
        {
            var characterCreateInfo = new CharacterCreateInfo();

            characterCreateInfo.Unpack(message.Payload);

            // TODO: Check for Banned Name Here
            //DatabaseManager.Shard.IsCharacterNameBanned(characterCreateInfo.Name, isBanned =>
            //{
            //    if (!isBanned)
            //    {
            //        SendCharacterCreateResponse(session, CharacterGenerationVerificationResponse.NameBanned);
            //        return;
            //    }
            //});

            // Disable OlthoiPlay characters for now. They're not implemented yet.
            // FIXME: Restore OlthoiPlay characters when properly handled.
            if (characterCreateInfo.Heritage == (int)HeritageGroup.Olthoi || characterCreateInfo.Heritage == (int)HeritageGroup.OlthoiAcid)
            {
                SendCharacterCreateResponse(session, CharacterGenerationVerificationResponse.Pending);
                return;
            }

            Weenie weenie;

            if (ConfigManager.Config.Server.Accounts.OverrideCharacterPermissions)
            {
                if (session.AccessLevel >= AccessLevel.Developer && session.AccessLevel <= AccessLevel.Admin)
                {
                    weenie = DatabaseManager.World.GetCachedWeenie("admin");
                }
                else if (session.AccessLevel >= AccessLevel.Sentinel && session.AccessLevel <= AccessLevel.Envoy)
                {
                    weenie = DatabaseManager.World.GetCachedWeenie("sentinel");
                }
                else
                {
                    weenie = DatabaseManager.World.GetCachedWeenie("human");
                }

                if (characterCreateInfo.Heritage == (int)HeritageGroup.Olthoi && weenie.Type == (int)WeenieType.Admin)
                {
                    weenie = DatabaseManager.World.GetCachedWeenie("olthoiadmin");
                }

                if (characterCreateInfo.Heritage == (int)HeritageGroup.OlthoiAcid && weenie.Type == (int)WeenieType.Admin)
                {
                    weenie = DatabaseManager.World.GetCachedWeenie("olthoiacidadmin");
                }
            }
            else
            {
                weenie = DatabaseManager.World.GetCachedWeenie("human");
            }

            if (characterCreateInfo.Heritage == (int)HeritageGroup.Olthoi && weenie.Type == (int)WeenieType.Creature)
            {
                weenie = DatabaseManager.World.GetCachedWeenie("olthoiplayer");
            }

            if (characterCreateInfo.Heritage == (int)HeritageGroup.OlthoiAcid && weenie.Type == (int)WeenieType.Creature)
            {
                weenie = DatabaseManager.World.GetCachedWeenie("olthoiacidplayer");
            }

            if (characterCreateInfo.IsSentinel && session.AccessLevel >= AccessLevel.Sentinel)
            {
                weenie = DatabaseManager.World.GetCachedWeenie("sentinel");
            }

            if (characterCreateInfo.IsAdmin && session.AccessLevel >= AccessLevel.Developer)
            {
                weenie = DatabaseManager.World.GetCachedWeenie("admin");
            }

            if (weenie == null)
            {
                weenie = DatabaseManager.World.GetCachedWeenie("human"); // Default catch-all
            }
            if (weenie == null)                                          // If it is STILL null after the above catchall, the database is missing critical data and cannot continue with character creation.
            {
                SendCharacterCreateResponse(session, CharacterGenerationVerificationResponse.DatabaseDown);
                log.Error("Database does not contain the weenie for human (1). Characters cannot be created until the missing weenie is restored.");
                return;
            }

            // Removes the generic knife and buckler, hidden Javelin, 30 stack of arrows, and 5 stack of coins that are given to all characters
            // Starter Gear from the JSON file are added to the character later in the CharacterCreateEx() process
            weenie.WeeniePropertiesCreateList.Clear();

            var guid = GuidManager.NewPlayerGuid();

            var weenieType = (WeenieType)weenie.Type;

            // If Database didn't have Sentinel/Admin weenies, alter the weenietype coming in.
            if (ConfigManager.Config.Server.Accounts.OverrideCharacterPermissions)
            {
                if (session.AccessLevel >= AccessLevel.Developer && session.AccessLevel <= AccessLevel.Admin && weenieType != WeenieType.Admin)
                {
                    weenieType = WeenieType.Admin;
                }
                else if (session.AccessLevel >= AccessLevel.Sentinel && session.AccessLevel <= AccessLevel.Envoy && weenieType != WeenieType.Sentinel)
                {
                    weenieType = WeenieType.Sentinel;
                }
            }


            var result = PlayerFactory.Create(characterCreateInfo, weenie, guid, session.AccountId, weenieType, out var player);

            if (result != PlayerFactory.CreateResult.Success || player == null)
            {
                SendCharacterCreateResponse(session, CharacterGenerationVerificationResponse.Corrupt);
                return;
            }


            DatabaseManager.Shard.IsCharacterNameAvailable(characterCreateInfo.Name, isAvailable =>
            {
                if (!isAvailable)
                {
                    SendCharacterCreateResponse(session, CharacterGenerationVerificationResponse.NameInUse);
                    return;
                }

                var possessions     = player.GetAllPossessions();
                var possessedBiotas = new Collection <(Biota biota, ReaderWriterLockSlim rwLock)>();
                foreach (var possession in possessions)
                {
                    possessedBiotas.Add((possession.Biota, possession.BiotaDatabaseLock));
                }
Esempio n. 60
0
 // Token: 0x060025FC RID: 9724 RVA: 0x000BB5C8 File Offset: 0x000B99C8
 private void OnEcho_Done(Hub hub, ClientMessage originalMessage, ResultMessage result)
 {
     this.typedEchoResult = "TypedDemoHub.Echo(string message) invoked!";
 }