コード例 #1
0
func process_client(session *socket.Tcpsession, p packet.Packet, _ error) {
	rpk := p.(*packet.RPacket)
	cmd, _ := rpk.Uint16()
	if cmd == request_file {
		if session.Ud() != nil {
			fmt.Printf("already in transfer session\n")
		} else {
			filename, _ := rpk.String()
			filecontent := filemap[filename]
			if filecontent == nil {
				fmt.Printf("%s not found\n", filename)
				session.Close()
			} else {
				fmt.Printf("request file %s\n", filename)
				tsession := &transfer_session{filecontent: filecontent, ridx: 0}
				session.SetUd(tsession)
				wpk := packet.NewWPacket(packet.NewByteBuffer(64))
				wpk.PutUint16(file_size)
				wpk.PutUint32(uint32(len(filecontent)))
				if nil == session.Send(wpk) {
					tsession.send_file(session)
				}
			}
		}
	}
	session.Close()
}