示例#1
0
        private void SetNewOwnerCommand(IDictionary <string, object> command)
        {
            var character = command.Get(Constants.Arguments.Character);
            var channelId = command.Get(Constants.Arguments.Channel);
            GeneralChannelModel channel;

            lock (chatStateLocker)
                channel = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

            if (channel == null)
            {
                return;
            }

            var mods = channel.CharacterManager.GetNames(ListKind.Moderator, false).ToList();

            mods[0] = character;
            channel.CharacterManager.Set(mods, ListKind.Moderator);

            var update = new ChannelUpdateModel(channel, new ChannelOwnerChangedEventArgs {
                NewOwner = character
            });

            Events.NewUpdate(update);
        }
        public BaseResponseDto Update(ChannelUpdateModel channelUpdateModel)
        {
            BaseResponseDto responseDto = null;

            if (channelUpdateModel == null)
            {
                responseDto = new BaseResponseDto
                {
                    Status  = 1,
                    Message = "Faulthy channel info"
                };
                return(responseDto);
            }

            Channel existingChannel = null;

            try
            {
                existingChannel = _uow.GetRepository <Channel>()
                                  .GetAll()
                                  .FirstOrDefault(s => s.ChannelId == channelUpdateModel.ChannelId);
            }
            catch (Exception e)
            {
                throw e;
            }

            if (existingChannel == null)
            {
                responseDto = new BaseResponseDto
                {
                    Status  = 2,
                    Message = "No existing channel with specified id found"
                };
                return(responseDto);
            }

            existingChannel.MentorId  = channelUpdateModel.MentorId;
            existingChannel.TopicId   = channelUpdateModel.TopicId;
            existingChannel.IsDisable = channelUpdateModel.IsDisable;

            try
            {
                _uow.GetRepository <Channel>().Update(existingChannel);
                _uow.Commit();
            }
            catch (Exception e)
            {
                throw e;
            }

            responseDto = new BaseResponseDto
            {
                Status  = 0,
                Message = "Success"
            };

            return(responseDto);
        }
 public async Task UpdateV5Channel(V5API.Channel.ChannelModel channel, string status = null, GameModel game = null)
 {
     ChannelUpdateModel update = new ChannelUpdateModel()
     {
         status = (!string.IsNullOrEmpty(status)) ? status : null,
         game   = (game != null) ? game.name : null
     };
     await AsyncRunner.RunAsync(this.Connection.V5API.Channels.UpdateChannel(channel, update));
 }
示例#4
0
        private void ChannelBanListCommand(IDictionary <string, object> command)
        {
            lock (chatStateLocker)
            {
                var channelId = command.Get(Constants.Arguments.Channel);
                var channel   = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

                if (channel == null)
                {
                    RequeueCommand(command);
                    return;
                }

                var @event = new ChannelUpdateModel(channel, new ChannelTypeBannedListEventArgs());

                if (command.ContainsKey(Constants.Arguments.Message))
                {
                    var msg     = command.Get(Constants.Arguments.Message);
                    var banlist = msg.Split(new[] { ",", ":", "has been" }, StringSplitOptions.RemoveEmptyEntries)
                                  .Select(x => x.Trim())
                                  .ToList();

                    if (msg.ContainsOrdinal("has been"))
                    {
                        var character = banlist[0];
                        channel.CharacterManager.Remove(character, ListKind.Banned);
                        Events.NewUpdate(@event);
                        return;
                    }

                    channel.CharacterManager.Set(banlist.Skip(1).Where(x => !string.IsNullOrWhiteSpace(x)),
                                                 ListKind.Banned);
                    Events.NewUpdate(@event);
                    return;
                }

                var message = channelId.Split(':');
                var banned  = message[1].Trim();

                if (banned.IndexOf(',') == -1)
                {
                    channel.CharacterManager.Add(banned, ListKind.Banned);
                }
                else
                {
                    channel.CharacterManager.Set(banned.Split(','), ListKind.Banned);
                }

                Events.NewUpdate(@event);
            }
        }
示例#5
0
        private void SetNewOwnerCommand(IDictionary<string, object> command)
        {
            var character = command.Get(Constants.Arguments.Character);
            var channelId = command.Get(Constants.Arguments.Channel);

            var channel = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

            if (channel == null) return;

            var mods = channel.CharacterManager.GetNames(ListKind.Moderator, false).ToList();
            mods[0] = character;
            channel.CharacterManager.Set(mods, ListKind.Moderator);

            var update = new ChannelUpdateModel(channel, new ChannelOwnerChangedEventArgs {NewOwner = character});
            Events.NewUpdate(update);
        }
示例#6
0
        private void ChannelBanListCommand(IDictionary<string, object> command)
        {
            lock (chatStateLocker)
            {
                var channelId = command.Get(Constants.Arguments.Channel);
                var channel = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

                if (channel == null)
                {
                    RequeueCommand(command);
                    return;
                }

                var @event = new ChannelUpdateModel(channel, new ChannelTypeBannedListEventArgs());

                if (command.ContainsKey(Constants.Arguments.Message))
                {
                    var msg = command.Get(Constants.Arguments.Message);
                    var banlist = msg.Split(new[] {",", ":", "has been"}, StringSplitOptions.RemoveEmptyEntries)
                                     .Select(x => x.Trim())
                                     .ToList();

                    if (msg.ContainsOrdinal("has been"))
                    {
                        var character = banlist[0];
                        channel.CharacterManager.Remove(character, ListKind.Banned);
                        Events.NewUpdate(@event);
                        return;
                    }

                    channel.CharacterManager.Set(banlist.Skip(1).Where(x => !string.IsNullOrWhiteSpace(x)),
                        ListKind.Banned);
                    Events.NewUpdate(@event);
                    return;
                }

                var message = channelId.Split(':');
                var banned = message[1].Trim();

                if (banned.IndexOf(',') == -1)
                    channel.CharacterManager.Add(banned, ListKind.Banned);
                else
                    channel.CharacterManager.Set(banned.Split(','), ListKind.Banned);

                Events.NewUpdate(@event);
            }
        }
示例#7
0
        private void KickCommand(IDictionary <string, object> command)
        {
            var kicker    = command.Get("operator");
            var channelId = command.Get(Constants.Arguments.Channel);
            var kicked    = command.Get(Constants.Arguments.Character);
            var isBan     = command.Get(Constants.Arguments.Command) == Constants.ServerCommands.ChannelBan;
            GeneralChannelModel channel;

            lock (chatStateLocker)
                channel = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

            if (channel == null)
            {
                RequeueCommand(command);
                return;
            }

            if (ChatModel.CurrentCharacter.NameEquals(kicked))
            {
                kicked = "you";
            }

            var args = new ChannelDisciplineEventArgs
            {
                IsBan  = isBan,
                Kicked = kicked,
                Kicker = kicker
            };
            var update = new ChannelUpdateModel(channel, args);

            if (kicked == "you")
            {
                channels.RemoveChannel(channelId);
            }
            else
            {
                channel.CharacterManager.SignOff(kicked);
            }

            if (isBan)
            {
                channel.CharacterManager.Add(kicked, ListKind.Banned);
            }

            Events.NewUpdate(update);
        }
示例#8
0
        public void UpdateChannel()
        {
            TestWrapper(async(TwitchConnection connection) =>
            {
                ChannelModel channel = await ChannelsServiceUnitTests.GetCurrentChannel(connection);

                ChannelUpdateModel update = new ChannelUpdateModel()
                {
                    status = "Test Status - " + DateTimeOffset.Now.ToString()
                };

                ChannelModel result = await connection.V5API.Channels.UpdateChannel(channel, update);

                Assert.IsNotNull(result);
                Assert.IsNotNull(result.id);
                Assert.AreEqual(result.status, update.status);
            });
        }
示例#9
0
        public IActionResult Update(ChannelUpdateModel channelUpdateModel)
        {
            BaseResponseDto responseDto = null;

            if (channelUpdateModel == null)
            {
                return(BadRequest("Sharing info must not be null"));
            }

            try
            {
                responseDto = _channel.Update(channelUpdateModel);
            }
            catch (Exception e)
            {
                return(StatusCode(500, e));
            }

            return(Ok(responseDto.Message));
        }
示例#10
0
        private void KickCommand(IDictionary<string, object> command)
        {
            var kicker = command.Get("operator");
            var channelId = command.Get(Constants.Arguments.Channel);
            var kicked = command.Get(Constants.Arguments.Character);
            var isBan = command.Get(Constants.Arguments.Command) == Constants.ServerCommands.ChannelBan;
            GeneralChannelModel channel;

            lock (chatStateLocker)
                channel = ChatModel.CurrentChannels.FirstByIdOrNull(channelId);

            if (channel == null)
            {
                RequeueCommand(command);
                return;
            }

            if (ChatModel.CurrentCharacter.NameEquals(kicked))
                kicked = "you";

            var args = new ChannelDisciplineEventArgs
            {
                IsBan = isBan,
                Kicked = kicked,
                Kicker = kicker
            };
            var update = new ChannelUpdateModel(channel, args);

            if (kicked == "you")
                channels.RemoveChannel(channelId);
            else
                channel.CharacterManager.SignOff(kicked);

            if (isBan)
            {
                channel.CharacterManager.Add(kicked, ListKind.Banned);
            }

            Events.NewUpdate(update);
        }
示例#11
0
        private void KickCommand(IDictionary<string, object> command)
        {
            var kicker = command.Get("operator");
            var channelId = command.Get(Constants.Arguments.Channel);
            var kicked = command.Get(Constants.Arguments.Character);
            var isBan = command.Get(Constants.Arguments.Command) == Commands.ChannelBan;
            var channel = ChatModel.FindChannel(channelId) as GeneralChannelModel;

            if (kicked.Equals(ChatModel.CurrentCharacter.Name, StringComparison.OrdinalIgnoreCase))
                kicked = "you";

            var args = new ChannelUpdateModel.ChannelDisciplineEventArgs
                {
                    IsBan = isBan,
                    Kicked = kicked,
                    Kicker = kicker
                };
            var update = new ChannelUpdateModel(channel, args);

            if (kicked == "you")
                manager.RemoveChannel(channelId);
            else
                channel.CharacterManager.SignOff(kicked);

            Events.GetEvent<NewUpdateEvent>().Publish(update);
        }
 /// <summary>
 /// Updates the channel with the specified metadata.
 /// </summary>
 /// <param name="channel">The channel to update</param>
 /// <param name="update">The metadata to update</param>
 /// <returns>The updated channel</returns>
 public async Task <PrivateChannelModel> UpdateChannel(ChannelModel channel, ChannelUpdateModel update)
 {
     Validator.ValidateVariable(update, "update");
     return(await this.PutAsync <PrivateChannelModel>("channels/" + channel.id, AdvancedHttpClient.CreateContentFromObject(new { channel = update })));
 }
示例#13
0
        /// <summary>
        /// Conversion method for received data
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public DataPointImpl[] ParseData(string data, DateTime occured)
        {
            //Check if this is legacy data
            if (_datafeedversion == 1)
            {
                return(ParseDataV1(data));
            }

            //Parse data
            SocketMethodModel <OrderBookParamsModel> orderbooksnapshot = null;
            SocketMethodModel <OrderBookParamsModel> orderbookupdate   = null;
            SocketMethodModel <TradesParamsModel>    tradeupdate       = null;
            ChannelUpdateModel channelupdate = null;

            if (data.Contains("updateOrderbook"))
            {
                orderbookupdate = JSON.Deserialize <SocketMethodModel <OrderBookParamsModel> >(data);
            }
            else if (data.Contains("snapshotOrderbook"))
            {
                orderbooksnapshot = JSON.Deserialize <SocketMethodModel <OrderBookParamsModel> >(data);
            }
            else if (data.Contains("updateTrades"))
            {
                tradeupdate = JSON.Deserialize <SocketMethodModel <TradesParamsModel> >(data);
            }
            else if (data.Contains("channel"))
            {
                return(new DataPointImpl[0]);
            }
            else if (data.Contains("result"))
            {
                //Process method request
                var request = JSON.Deserialize <SocketMethodModel <SymbolRequestModel> >(data);
                if (request.Result)
                {
                    _symbolRequests.RemoveAll(x => x.Id == request.Id);
                }
                else
                {
                    var found = _symbolRequests.FirstOrDefault(x => x.Id == request.Id);
                    if (found != null)
                    {
                        _log.Debug($"Request for HitBTC failed, retrying. Request body: {JSON.Serialize(request)}");
                        SendRequest(found);
                    }
                }

                //Return nothing
                return(new DataPointImpl[0]);
            }
            else
            {
                return(new DataPointImpl[0]);
            }

            //Set return object
            var toreturn = new List <DataPointImpl>();

            //Check orderbook snapshot
            if (orderbooksnapshot != null)
            {
                //Reset orderbook and recreate
                var snapshot = orderbooksnapshot.Params;

                //Check sequence number
                var fullseqno = snapshot.Sequence + snapshot.Symbol + "snapshot";
                if (_seqnomemory.Contains(fullseqno))
                {
                    return(toreturn.ToArray());
                }
                else
                {
                    _seqnomemory.Enqueue(fullseqno);
                }

                //Check order book and data
                if (!_orderbook.TryGetValue(snapshot.Symbol, out var fullOrderBook))
                {
                    fullOrderBook = new OrderBook(snapshot.Symbol);
                    _orderbook[snapshot.Symbol] = fullOrderBook;
                }

                //Reset order book
                fullOrderBook.Clear();
                snapshot.Bid.ForEach(b => fullOrderBook.AddQuote(true, b.DoublePrice, b.DoubleSize));
                snapshot.Ask.ForEach(a => fullOrderBook.AddQuote(false, a.DoublePrice, a.DoubleSize));
            }

            //Check orderbook update
            if (orderbookupdate != null)
            {
                var seqno = orderbookupdate.Params.Symbol + orderbookupdate.Params.Sequence;
                if (_seqnomemory.Contains(seqno))
                {
                    return(null);
                }
                else
                {
                    _seqnomemory.Enqueue(seqno);
                }

                //Check order book and data
                if (!_orderbook.TryGetValue(orderbookupdate.Params.Symbol, out var orderbook))
                {
                    orderbook = new OrderBook(orderbookupdate.Params.Symbol);
                    _orderbook[orderbookupdate.Params.Symbol] = orderbook;
                }

                //Check for quote updates in the order book (size == 0 = remove from order book)
                bool update = orderbookupdate.Params.Ask.Count(x => orderbook.AddQuote(false, x.DoublePrice, x.DoubleSize)) > 0;
                update = orderbookupdate.Params.Bid.Count(x => orderbook.AddQuote(true, x.DoublePrice, x.DoubleSize)) > 0 | update;

                //Check if we need to update level 0 quote
                if (update)
                {
                    //Deserialize tick
                    toreturn.Add(new Tick(GetQuantlerTicker(orderbookupdate.Params.Symbol), DataSource)
                    {
                        AskPrice = Convert.ToDecimal(orderbook.BestAsk),
                        BidPrice = Convert.ToDecimal(orderbook.BestBid),
                        AskSize  = Convert.ToDecimal(orderbook.AskSize),
                        BidSize  = Convert.ToDecimal(orderbook.BidSize),
                        Depth    = 0,
                        Occured  = occured,
                        TimeZone = TimeZone.Utc
                    });
                }
            }

            //Check for trade updates
            if (tradeupdate != null)
            {
                tradeupdate.Params.Data.ForEach(trade =>
                {
                    toreturn.Add(new Tick(GetQuantlerTicker(tradeupdate.Params.Symbol), DataSource)
                    {
                        Occured    = occured,
                        TimeZone   = TimeZone.Utc,
                        TradePrice = Convert.ToDecimal(trade.Price),
                        Size       = Convert.ToDecimal(trade.Quantity) * (trade.Side == "sell" ? -1 : 1)
                    });
                });
            }

            //Return what we have
            return(toreturn.ToArray());
        }