コード例 #1
0
ファイル: DataType.cs プロジェクト: Maksims/gh12-server
        public void AddParser(string protocol, IPacketDataTypeParser parser)
        {
            if(!this.container.ContainsKey(protocol)) {
                this.container.Add(protocol, parser);
            } else {

            }
        }
コード例 #2
0
 public void AddParser(string protocol, IPacketDataTypeParser parser)
 {
     if (!this.container.ContainsKey(protocol))
     {
         this.container.Add(protocol, parser);
     }
     else
     {
     }
 }
コード例 #3
0
        public byte[] Write(DataPacket data)
        {
            StringBuilder dataJSON = new StringBuilder(@"{""type"":""");

            dataJSON.Append(data.Name);

            dataJSON.Append(@"""");

            foreach (KeyValuePair <PacketField, FieldData> pair in data.Enumerator)
            {
                if (pair.Key.DataType != null)
                {
                    IPacketDataTypeParser parser = pair.Key.DataType.GetParser(this.name);
                    if (parser != null)
                    {
                        if (pair.Value.Value != null)
                        {
                            dataJSON.Append(@",""");
                            dataJSON.Append(pair.Key.Name);
                            dataJSON.Append(@""":");
                            dataJSON.Append(parser.Write(pair.Value.Value));
                        }
                    }
                    else
                    {
                        Log.Add("no data type (" + pair.Key.DataType.Name + ") parser for " + this.name + " protocol");
                    }
                }
                else
                {
                    Log.Add("unknown data type, field " + pair.Key.Name);
                }
            }

            dataJSON.Append(@"}");

            return(Encoding.UTF8.GetBytes(dataJSON.ToString()));
        }
コード例 #4
0
        public DataPacket Read(byte[] data)
        {
            string dataJSON = Encoding.UTF8.GetString(data).Replace(@"\""", "&quot;").Replace(@"<", "&lt;").Replace(@"<", "&gt;");

            string packetName = this.GetName(dataJSON);

            if (!string.IsNullOrEmpty(packetName))
            {
                PacketType packet = PacketFactory.Get(packetName);

                if (packet != null)
                {
                    DataPacket dataPacket = new DataPacket(packet);

                    foreach (PacketField field in packet.Fields)
                    {
                        string value = string.Empty;
                        if (field.DataType != null)
                        {
                            IPacketDataTypeParser parser = field.DataType.GetParser(this.name);
                            if (parser != null)
                            {
                                switch (field.DataType.Name)
                                {
                                case "bool":
                                    value = this.GetValueBool(dataJSON, field.Name);
                                    break;

                                case "byte":
                                case "sbyte":
                                case "short":
                                case "ushort":
                                case "int":
                                case "uint":
                                case "long":
                                case "ulong":
                                case "float":
                                case "double":
                                case "timespan":
                                    value = this.GetValueNumber(dataJSON, field.Name);
                                    break;

                                case "string":
                                    value = this.GetValueString(dataJSON, field.Name);
                                    break;

                                default:
                                    Log.Add("unknown data type: " + field.DataType.Name);
                                    break;
                                }
                                if (!string.IsNullOrEmpty(value))
                                {
                                    dataPacket[field] = field.DataType.GetParser(this.name).Read(value);
                                }
                            }
                            else
                            {
                                Log.Add("no data type (" + field.DataType.Name + ") parser for " + this.name + " protocol");
                            }
                        }
                        else
                        {
                            Log.Add("unknown data type, field: " + field.Name);
                        }
                    }
                    return(dataPacket);
                }
                else
                {
                    Log.Add("unknown packet: " + packetName);
                    return(null);
                }
            }
            else
            {
                Log.Add("wrong packet (no type)");
                return(null);
            }
        }