示例#1
0
文件: Protocol.cs 项目: iTKerry/coan
        public void addSupport(int typeIndex, int freqIndex)
        {
            AdminUpdateFrequency freq = (AdminUpdateFrequency)freqIndex;
            AdminUpdateType      type = (AdminUpdateType)typeIndex;

            if (supportedFrequencies.Keys.Contains(type) == false)
            {
                supportedFrequencies.Add(type, new ArrayList());
            }
            supportedFrequencies[type].Add(freq);
        }
        public IAdminMessage Transform(Packet packet)
        {
            var  dic     = new Dictionary <AdminUpdateType, UpdateFrequency>();
            byte version = packet.ReadByte();

            while (packet.ReadBool())
            {
                AdminUpdateType updateType = (AdminUpdateType)packet.ReadU16();
                ushort          frequency  = packet.ReadU16();
                dic.Add(updateType, (UpdateFrequency)frequency);
            }

            return(new AdminServerProtocolMessage(version, dic));
        }
示例#3
0
        public void sendAdminPoll(AdminUpdateType type, long data = 0)
        {
            if (getProtocol().isSupported(type, AdminUpdateFrequency.ADMIN_FREQUENCY_POLL) == false)
            {
                throw new ArgumentException("The server does not support polling for " + type);
            }

            Packet p = new Packet(getSocket(), PacketType.ADMIN_PACKET_ADMIN_POLL);

            p.writeUint8((short)type);
            p.writeUint32(data);

            NetworkOutputThread.append(p);
        }
示例#4
0
        public void sendAdminUpdateFrequency(AdminUpdateType type, AdminUpdateFrequency freq)
        {
            if (getProtocol().isSupported(type, freq) == false)
            {
                throw new ArgumentException("The server does not support " + freq + " for " + type);
            }

            Packet p = new Packet(getSocket(), PacketType.ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY);

            p.writeUint16((int)type);
            p.writeUint16((int)freq);

            NetworkOutputThread.append(p);
        }
示例#5
0
 public void registerUpdateFrequency(AdminUpdateType type, AdminUpdateFrequency freq)
 {
     networkClient.sendAdminUpdateFrequency(type, freq);
 }
示例#6
0
 public AdminUpdateSetting(bool enabled, AdminUpdateType updateType, UpdateFrequency updateFrequency)
 {
     this.Enabled         = enabled;
     this.UpdateType      = updateType;
     this.UpdateFrequency = UpdateFrequency;
 }
 public AdminUpdateFrequencyMessage(AdminUpdateType updateType, UpdateFrequency updateFrequency)
 {
     this.UpdateType      = updateType;
     this.UpdateFrequency = updateFrequency;
 }
示例#8
0
        public IAdminMessage ReadPacket(Packet packet)
        {
            var type = (AdminMessageType)packet.ReadByte();

            switch (type)
            {
            case AdminMessageType.ADMIN_PACKET_SERVER_PROTOCOL:
            {
                var  dic     = new Dictionary <AdminUpdateType, UpdateFrequency>();
                byte version = packet.ReadByte();

                bool enabled;
                while (enabled = packet.ReadBool())
                {
                    AdminUpdateType updateType = (AdminUpdateType)packet.ReadU16();
                    ushort          frequency  = packet.ReadU16();
                    dic.Add(updateType, (UpdateFrequency)frequency);
                }

                return(new AdminServerProtocolMessage(version, dic));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_WELCOME:
            {
                return(new AdminServerWelcomeMessage()
                    {
                        ServerName = packet.ReadString(),
                        NetworkRevision = packet.ReadString(),
                        IsDedicated = packet.ReadBool(),
                        MapName = packet.ReadString(),
                        MapSeed = packet.ReadU32(),
                        Landscape = (Landscape)packet.ReadByte(),
                        CurrentDate = new OttdDate(packet.ReadU32()),
                        MapWidth = packet.ReadU16(),
                        MapHeight = packet.ReadU16(),
                    });
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_DATE:
            {
                return(new AdminServerDateMessage(packet.ReadU32()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CLIENT_JOIN:
            {
                return(new AdminServerClientJoinMessage(packet.ReadU32()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CLIENT_INFO:
            {
                return(new AdminServerClientInfoMessage()
                    {
                        ClientId = packet.ReadU32(),
                        Hostname = packet.ReadString(),
                        ClientName = packet.ReadString(),
                        Language = packet.ReadByte(),
                        JoinDate = new OttdDate(packet.ReadU32()),
                        PlayingAs = packet.ReadByte(),
                    });
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CLIENT_UPDATE:
            {
                uint   clientId   = packet.ReadU32();
                string clientName = packet.ReadString();
                byte   playingAs  = packet.ReadByte();
                return(new AdminServerClientUpdateMessage(clientId, clientName, playingAs));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CLIENT_QUIT:
            {
                return(new AdminServerClientQuit(packet.ReadU32()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CLIENT_ERROR:
            {
                return(new AdminServerClientErrorMessage(packet.ReadU32(), packet.ReadByte()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_NEW:
            {
                return(new AdminServerCompanyNewMessage(packet.ReadByte()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_INFO:
            {
                var m = new AdminServerCompanyInfoMessage();
                m.CompanyId          = packet.ReadByte();
                m.CompanyName        = packet.ReadString();
                m.ManagerName        = packet.ReadString();
                m.Color              = packet.ReadByte();
                m.HasPassword        = packet.ReadBool();
                m.CreationDate       = new OttdDate(packet.ReadU32());
                m.IsAi               = packet.ReadBool();
                m.MonthsOfBankruptcy = packet.ReadByte();
                for (int i = 0; i < m.ShareOwnersIds.Length; ++i)
                {
                    m.ShareOwnersIds[i] = packet.ReadByte();
                }

                return(m);
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_UPDATE:
            {
                var m = new AdminServerCompanyUpdateMessage();
                m.CompanyId          = packet.ReadByte();
                m.CompanyName        = packet.ReadString();
                m.ManagerName        = packet.ReadString();
                m.Color              = packet.ReadByte();
                m.HasPassword        = packet.ReadBool();
                m.MonthsOfBankruptcy = packet.ReadByte();
                for (int i = 0; i < m.ShareOwnersIds.Length; ++i)
                {
                    m.ShareOwnersIds[i] = packet.ReadByte();
                }

                return(m);
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_REMOVE:
            {
                return(new AdminServerCompanyRemoveMessage(packet.ReadByte(), packet.ReadByte()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_ECONOMY:
            {
                var m = new AdminServerCompanyEconomyMessage();
                m.CompanyId      = packet.ReadByte();
                m.Money          = packet.ReadU64();
                m.CurrentLoan    = packet.ReadU64();
                m.Income         = packet.ReadU64();
                m.DeliveredCargo = packet.ReadU16();

                // TODO : add quarters.

                return(m);
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CHAT:
            {
                var m = new AdminServerChatMessage();
                m.NetworkAction   = (NetworkAction)packet.ReadByte();
                m.ChatDestination = (ChatDestination)packet.ReadByte();
                m.ClientId        = packet.ReadU32();
                m.Message         = packet.ReadString();
                m.Data            = packet.ReadI64();

                return(m);
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_RCON:
            {
                return(new AdminServerRconMessage(packet.ReadU16(), packet.ReadString()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_CONSOLE:
            {
                return(new AdminServerConsoleMessage(packet.ReadString(), packet.ReadString()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_PONG:
            {
                return(new AdminServerPongMessage(packet.ReadU32()));
            }

            case AdminMessageType.ADMIN_PACKET_SERVER_NEWGAME:
            case AdminMessageType.ADMIN_PACKET_SERVER_SHUTDOWN:
            case AdminMessageType.ADMIN_PACKET_SERVER_CMD_NAMES:
            case AdminMessageType.ADMIN_PACKET_SERVER_CMD_LOGGING:
            case AdminMessageType.ADMIN_PACKET_SERVER_GAMESCRIPT:
            case AdminMessageType.ADMIN_PACKET_SERVER_RCON_END:
            case AdminMessageType.ADMIN_PACKET_SERVER_COMPANY_STATS:     // I do not need this packet for now.
            {
                return(new GenericAdminMessage(type));
            }

            default:
                throw new ArgumentException(type.ToString());
            }
        }
示例#9
0
 public AdminPollMessage(AdminUpdateType updateType, uint argument)
 {
     this.UpdateType = updateType;
     this.Argument   = argument;
 }
示例#10
0
文件: Protocol.cs 项目: iTKerry/coan
 public bool isSupported(AdminUpdateType type, AdminUpdateFrequency freq)
 {
     return(supportedFrequencies[type].Contains(freq));
 }