Exemple #1
0
        public static void InterpretCommand(dynamic message, SyncService s, SyncRoom room)
        {
            if (RegisteredInterpreters[(string)message.CommandType] != null)
            {
                Action <dynamic, SyncService, SyncRoom> act = RegisteredInterpreters[(string)message.CommandType];

                act.Invoke(message, s, room);
            }
        }
Exemple #2
0
        public static void OnAddLike(dynamic message, SyncService s, SyncRoom room)
        {
            var res = new
            {
                CommandType = CommandType.UPDATELIKES.Value,
                Likes       = room.AddLike()
            };

            room.Broadcast(JsonConvert.SerializeObject(res));
        }
Exemple #3
0
        public static void OnUsernameUpdate(dynamic message, SyncService s, SyncRoom room)
        {
            s.Nickname = (string)message.Nickname;

            //notify of nickname change
            var res1 = new
            {
                CommandType = CommandType.SETUSERNICKNAME.Value,
                Nickname    = s.Nickname
            };

            s.SendMessage(JsonConvert.SerializeObject(res1));

            //notify rest of room of nickname change
            room.SendUserList();
        }
Exemple #4
0
        public static void OnKickUser(dynamic message, SyncService s, SyncRoom room)
        {
            if (s.Permissions == UserPermissionLevel.OWNER)
            {
                SyncService target = room.GetServiceByNickname((string)message.TargetNickname);

                var res = new
                {
                    CommandType = CommandType.KICKUSER.Value
                };

                target.SendMessage(JsonConvert.SerializeObject(res));

                target.Disconnect();
            }
        }
Exemple #5
0
        public static void OnUpgradeUserPermissions(dynamic message, SyncService s, SyncRoom room)
        {
            if (s.Permissions == UserPermissionLevel.OWNER)
            {
                SyncService target = room.GetServiceByNickname((string)message.TargetNickname);

                if ((bool)message.Upgrade)
                {
                    target.Permissions = UserPermissionLevel.TRUSTED;
                }
                else
                {
                    target.Permissions = UserPermissionLevel.VIEWER;
                }
            }
        }
Exemple #6
0
        public static void OnSyncState(dynamic message, SyncService s, SyncRoom room)
        {
            if (s.Permissions == UserPermissionLevel.OWNER)
            {
                var res = new
                {
                    CommandType = CommandType.SYNCSTATE.Value,
                    State       = new
                    {
                        Paused = message.Paused,
                        Time   = message.Time
                    }
                };

                room.Broadcast(JsonConvert.SerializeObject(res));
            }
        }
Exemple #7
0
        public static void OnModifyQueue(dynamic message, SyncService s, SyncRoom room)
        {
            if (s.Permissions == UserPermissionLevel.OWNER || s.Permissions == UserPermissionLevel.TRUSTED)
            {
                room.CurrentQueue.Name       = message.Queue.Name;
                room.CurrentQueue.QueueIndex = message.Queue.QueueIndex;
                room.CurrentQueue.URLs       = message.Queue.URLs.ToObject <string[]>();

                var res = new
                {
                    CommandType = CommandType.QUEUEUPDATE.Value,
                    Queue       = new
                    {
                        Name       = room.CurrentQueue.Name,
                        QueueIndex = room.CurrentQueue.QueueIndex,
                        URLs       = room.CurrentQueue.URLs
                    }
                };

                room.BroadcastExcept(JsonConvert.SerializeObject(res), s);
            }
        }
Exemple #8
0
        public static void OnRegisterUser(dynamic message, SyncService s, SyncRoom room)
        {
            var success = false;

            if (UserAuth.RegisterUser((string)message.Username, (string)message.Email, (string)message.Password))
            {
                Logger.Log("Client {0} successfully registered as {1}.", s.Nickname, message.Username);
                s.Nickname = message.Username;

                success = true;
            }
            else
            {
                Logger.Log("Something went wrong with registration");
            }

            var res = new
            {
                CommandType = CommandType.REGISTERUSER.Value,
                Value       = success
            };

            s.SendMessage(JsonConvert.SerializeObject(res));
        }
Exemple #9
0
 public static void OnStatusUpdate(dynamic message, SyncService s, SyncRoom room)
 {
     s.status = (UserStatus)message.Status;
     room.SendUserList();
 }
Exemple #10
0
 public static void OnUserListRequested(dynamic message, SyncService s, SyncRoom room)
 {
     room.SendUserList();
 }
Exemple #11
0
 public static void OnChat(dynamic message, SyncService s, SyncRoom room)
 {
     room.Broadcast(JsonConvert.SerializeObject(message));
 }
Exemple #12
0
 public static void OnLoginUser(dynamic message, SyncService s, SyncRoom room)
 {
     throw new NotImplementedException();
 }
Exemple #13
0
        private static void GotMessage(object state)
        {
            NetIncomingMessage incomingMessage;

            while ((incomingMessage = Client.ReadMessage()) != null)
            {
                // handle incoming message
                switch (incomingMessage.MessageType)
                {
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.ErrorMessage:
                case NetIncomingMessageType.WarningMessage:
                case NetIncomingMessageType.VerboseDebugMessage:
                    var text = incomingMessage.ReadString();
                    Console.WriteLine($"{incomingMessage.MessageType}: {text}");
                    break;

                case NetIncomingMessageType.StatusChanged:
                    var status = (NetConnectionStatus)incomingMessage.ReadByte();
                    var reason = incomingMessage.ReadString();
                    Console.WriteLine($"{status}, Reason: {reason}");

                    switch (status)
                    {
                    case NetConnectionStatus.Connected:
                        Connected?.Invoke(null, EventArgs.Empty);
                        break;

                    case NetConnectionStatus.Disconnected:
                        Disconnected?.Invoke(null, EventArgs.Empty);
                        break;
                    }

                    break;

                case NetIncomingMessageType.Data:
                    var messageType = (PacketType)incomingMessage.ReadInt16();

                    switch (messageType)
                    {
                    case PacketType.SPacketJoinRoom:
                        JoinRoomResponse?.Invoke(null, incomingMessage.ReadStruct <SPacketJoinRoom>());
                        break;

                    case PacketType.SPacketCreateRoom:
                        CreateRoomResponse?.Invoke(null, incomingMessage.ReadStruct <SPacketCreateRoom>());
                        break;

                    case PacketType.SPacketSyncRoom:
                    {
                        var packet = incomingMessage.ReadClass <SPacketSyncRoom>();

                        if (Room == null || Room.Id != packet.RoomId)
                        {
                            Room = new Room(packet.RoomId);
                        }

                        Player = packet.Players[packet.YourPlayer];

                        Room.Players.Clear();
                        Room.Players.AddRange(packet.Players);

                        Room.Board.Clear();
                        Room.Board.AddRange(packet.Board);

                        if (Room.CurrentPlayer != Player.Id && packet.CurrentPlayer == Player.Id)
                        {
                            TurnStarted?.Invoke(null, EventArgs.Empty);
                        }

                        Room.CurrentPlayer = packet.CurrentPlayer;

                        SyncRoom?.Invoke(null, packet);
                        break;
                    }

                    case PacketType.SPacketFloatingPiece:
                        FloatingPiece?.Invoke(null, incomingMessage.ReadStruct <SPacketFloatingPiece>());
                        break;
                    }
                    break;

                default:
                    Console.WriteLine($"Unhandled type: {incomingMessage.MessageType} {incomingMessage.LengthBytes} bytes");
                    break;
                }
                Client.FlushSendQueue();
                Client.Recycle(incomingMessage);
            }
        }