Exemplo n.º 1
0
 /// <summary>
 /// Called when the script is being destroyed.
 /// </summary>
 private void OnDestroy()
 {
     Logger.Log?.Debug($"{this.name}: OnDestroy()");
     this.CloseDanmakuClient();
     this._danmakuClient          = null;
     BiliSaberController.instance = null; // This MonoBehaviour is being destroyed, so set the static instance property to null.
 }
Exemplo n.º 2
0
 private void WsOnClosed()
 {
     this._danmakuClient.OnOpen           -= this.WsOnOpen;
     this._danmakuClient.OnDanmakuMessage -= this.WsOnDanmakuMessage;
     this._danmakuClient.OnClose          -= this.WsOnClose;
     this._danmakuClient.OnClosed         -= this.WsOnClosed;
     this._danmakuClient = null;
     Logger.Log?.Info("Danmaku Client closed.");
 }
Exemplo n.º 3
0
        private void InitDanmakuClient()
        {
            if (this._danmakuClient != null)
            {
                return;
            }

            var client = new DanmakuClient(RoomId, Uid, true);

            client.OnOpen           += this.WsOnOpen;
            client.OnDanmakuMessage += this.WsOnDanmakuMessage;
            client.OnClose          += this.WsOnClose;
            client.OnClosed         += this.WsOnClosed;
            client.Connect();
            this._danmakuClient = client;
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            var roomId = 21379626;
            var uid    = 141042;

            var client = new DanmakuClient(roomId, uid, true);

            client.OnOpen += () => {
                System.Console.WriteLine("Opened.");
            };

            client.OnStringMessage += message => {
                System.Console.WriteLine("OnStringMessage:", message);
            };

            client.OnDanmakuMessage += message => {
                System.Console.WriteLine("Get message:");

                switch (message.Operation)
                {
                case DanmakuOperation.GreetingAck:
                    System.Console.WriteLine("Greeting packet has been sent.");
                    break;

                case DanmakuOperation.HeartBeatAck:
                    System.Console.WriteLine("HeartBeat packet has been sent.");
                    break;

                case DanmakuOperation.ChatMessage:
                    string jsonString;

                    // Version 2 message is compressed by using GZIP.
                    if (message.Version == 2)
                    {
                        var       buffer       = message.Buffer;
                        var       length       = buffer.Length;
                        const int headerLength = DanmakuPacket.HeaderLength + 2;

                        var rawContent = new byte[length - headerLength];
                        for (var i = headerLength; i < length; i++)
                        {
                            rawContent[i - headerLength] = buffer[i];
                        }

                        byte[] inflatedBytes;
                        using (var inflateStream = new InflaterInputStream(new MemoryStream(rawContent))) {
                            using (var stream = new MemoryStream()) {
                                inflateStream.CopyTo(stream);
                                inflatedBytes = stream.ToArray();
                            }
                        }

                        var danmakuMessage = DanmakuMessage.ParseFirstPacket(inflatedBytes);
                        jsonString = danmakuMessage.Body;
                    }
                    else
                    {
                        jsonString = message.Body;
                    }

                    DealWithChatMessage(jsonString);
                    break;
                }
            };

            client.Connect();

            while (true)
            {
                // ...
            }
        }